题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
思路
采取滑动窗口法
代码
/**
* 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
*/
public class Solution {
public static void main(String[] args) {
String s="abcabcbb";
System.out.println(lengthOfLongestSubstring(s));
}
public static int lengthOfLongestSubstring(String s) {
Map<Character, Integer> hashmap = new HashMap<>();
int left = 0, maxLen = 0;//maxLen滑动窗口大小
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if(hashmap.containsKey(c)){
//重复位置+1开始和left指针取最大值,新值赋给left
left = Math.max(left, hashmap.get(c) + 1);
}
hashmap.put(c, i);
maxLen = Math.max(maxLen, i - left + 1);
}
return maxLen;
}
}
总结
当题目出现重复,可以理解为1次以上,此时采用map的方式最好。