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;
}
}