Leetcode03無重複字符的最長子串

Leetcode03無重複字符的最長子串

給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。

想法

這種類型的題可以通過滑動窗口解決。
比較簡便的方法是利用map,將字符和對應的下標保存爲key-value對的方式,這樣就可以通過下標去控制窗口顯示,保證窗口內一直是沒有重複元素的。這樣只要遍歷一邊所有元素就可以獲得結果。

代碼

public class Solution {
    public int lengthOfLongestSubstring(String s) {
        //定義左右邊界以及初始化返回
        int left = 0, right = 0, res = 0;
        int length = s.length();
        //建立一個map
        Map<Character,Integer> map = new HashMap<>();
        //保證右邊界小於字符串就
        while (right<length){
            //判斷map中是否包含該字符
            if (map.containsKey(s.charAt(right))){
                //若包含每次區最右邊的作爲左邊界
                left = Math.max(left,map.get(s.charAt(right)));
            }
            //保證獲得的子串長度取最大
            res = Math.max(res,right-left+1);
            map.put(s.charAt(right),right+1);
            right++;

        }
        return res;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章