LeetCode

LeetCode 3. 无重复字符的最长子串

2020-03-05  本文已影响0人  桐桑入梦

给定一个字符串,请你找出其中不含有重复字符的 **最长子串 **的长度。

示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3

示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1

示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int length = s.length();
        if( length == 0 )
            return 0;
        Map<Character,Integer> map = new HashMap<>();
        int p1 = 0, p2 = 0, maxLen = 1;
        map.put( s.charAt( p2 ) , 1 );

        while( p2 != length - 1 ){
            p2++;
            if( map.get( s.charAt( p2 ) ) == null )
                map.put( s.charAt( p2 ), 1);
            else
                map.put( s.charAt( p2 ), map.get( s.charAt( p2 ) ) + 1 );
            
            if( map.get( s.charAt( p2 ) ) == 2 ){
                while( map.get( s.charAt( p1 ) ) != 2 ){
                    map.put( s.charAt( p1 ), 0 );
                    p1++;
                }
                map.put( s.charAt( p1 ), 1 );
                p1++;
            }
            maxLen = Math.max( maxLen, p2 - p1 + 1 );
        }
        return maxLen;
    }
}
上一篇下一篇

猜你喜欢

热点阅读