3、Longest SubString Without Repeating Charactors

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 map = new HashMap();
            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 Repeating Charactors)