package a8;
import java.util.HashSet;
class Solution {
public static void main(String[] args) {
String str = "pwwkew";
System.out.println(new Solution().lengthOfLongestSubstring(str));
}
//原做法(已通过)
/*public int lengthOfLongestSubstring(String s) {
if(s.isEmpty()) return 0;
int begin = 0, end = 0;
int maxLen = 1;
while (end < s.length()) {
if(!s.substring(begin, end).contains(Character.toString(s.charAt(end)))) {
end++;
} else {
begin++;
}
maxLen = Math.max(end - begin, maxLen);
}
return maxLen;
}*/
//滑动窗口+hashset
public int lengthOfLongestSubstring(String s) {
if(s.isEmpty()) return 0;
int maxLen = 1;
char[] chars = s.toCharArray();
HashSet<Character> set = new HashSet<>();//记录窗口中出现的字符
for(int begin = 0, end = 0; end < chars.length; end++){//遍历窗口的左界
while (begin <= end && set.contains(chars[end])){
set.remove(chars[begin]);
begin++;
}
set.add(chars[end]);
maxLen = Math.max(maxLen, set.size());
}
return maxLen;
}
}
3. 无重复字符的最长子串
于 2024-08-28 11:56:28 首次发布