LeetCode質問3繰り返し文字のない最長の部分文字列

アイデア:
スライディングウィンドウ。startとendは、それぞれスライディングウィンドウの開始と終了を表し、文字が繰り返されていない部分文字列を表します。マップを使用して、訪問したキャラクターの位置を記録します。スライドの仕方は、端が徐々に端に近づくことです。そして、プロセスの開始の値を維持します。endが繰り返される文字にアクセスすると、startを更新します。開始と終了の両方が大きくなることはでき、小さくすることはできないことに注意してください。

別の観点から見ると、実際、スライディングウィンドウは、最後に終わる最長および最長の部分文字列を表します。

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

おすすめ

転載: blog.csdn.net/vxzhg/article/details/104263895