您的位置:首页 > 其它

给定一个字符串,找到最长子串的长度,而不重复字符。

2018-12-18 09:54 267 查看

思路:就是用set存数据,之后两个指针i,j。其中i不断向后遍历,set中不断添加i++的元素,当set遇到重复元素,则j向后移动一位,同时删除j所在位置的的元素,并且比较此时长度

class Solution {
public int lengthOfLongestSubstring(String s) {
if(s==null || s.length()== 0) return 0;
HashSet set=new HashSet();
int ret=0;

for(int i=0,j=0;i<s.length();i++){
if(!set.contains(s.charAt(i))){
set.add(s.charAt(i));
ret=Math.max(ret,set.size());

}else{

set.remove(s.charAt(j++));
}
}
return ret;

}
}

之后发现报错,aab这个输出为1,因为j后移会删除j++的值,那么a则不会存入进去,之后就开始看官方答案

class Solution {
public int lengthOfLongestSubstring(String s) {
int n = s.length();
Set<Character> set = new HashSet<>();
int ans = 0, i = 0, j = 0;
while (i < n && j < n) {
// try to extend the range [i, j]
if (!set.contains(s.charAt(j))){
set.add(s.charAt(i++));
ans = Math.max(ans, set.size());
}
else {
set.remove(s.charAt(j++));
}
}
return ans;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐