美文网首页
3、Longest SubString Without Repe

3、Longest SubString Without Repe

作者: 小鲜贝 | 来源:发表于2018-04-18 10:58 被阅读0次

Examples:
找出最长无重复子串长度
Given "abcabcbb", the answer is "abc", which the length is 3.
Given "bbbbb", the answer is "b", with the length of 1.
Given "pwwkew", the answer is "wke", with the length of 3.

思路
从左往右扫描字符串,记录当前重复字串的起始位置为start,当遇到重复字符时,将start更新为重复字符的index+1,比较当前不重复字符串长度与max值,更新max值。
寻找重复字符的方式:用一个map记录每个字符上次出现的位置(可用hashmap或int[256])。

解法

public class Solution {
        public int lengthOfLongestSubstring(String s) {
            HashMap<Character, Integer> map = new HashMap<Character,Integer>();
            int maxLen = 0;
            int start = 0;
            for (int i = 0; i< s.length(); i++) {
                if (!map.containsKey(s.charAt(i)) || map.get(s.charAt(i)) < start) {
                    map.put(s.charAt(i),i);
                }
                else {
                    maxLen = Math.max(maxLen,i - start);
                    start = map.get(s.charAt(i)) + 1;
                    map.put(s.charAt(i),i);
                }
            }
            
            maxLen = Math.max(maxLen, s.length() - start);
            
            return maxLen;
        }
    }

相关文章

网友评论

      本文标题:3、Longest SubString Without Repe

      本文链接:https://www.haomeiwen.com/subject/hlhvkftx.html