Given a string, find the length of the longest substring without repeating characters.
最简单的解决方式,逐渐遍历
最简单的解决方式,逐渐遍历
time:o(n^2)
space:o(n)
public int lengthOfLongestSubstring(String s) {
int len=s.length();
int result=0;
for(int i=0;i<len;i++){
HashSet<Character> set=new HashSet<Character>();
for(int j=i;j<len;j++){
if(set.contains(s.charAt(j)))
break;
else
set.add(s.charAt(j));
}
if(result<set.size())
result=set.size();
if(result>len-i)
break;
}
return result;
}
改进一点:
time: o(n)
space: o(n)
将每个字符及其顺序保存在map中,循环遍历,保留2个指针,一个指针指向当前位置i,一个指向开始保证从开始字符开始到当前字符没有出现过重复的j;若当前字符在之前出现过,则更新j,j应该是j和当前第i个字符在之前出现的位置的最大值;
public int lengthOfLongestSubstring(String s) {
if(s==null||s.length()==0)
return 0;
int max=1;
HashMap<Character,Integer> map=new HashMap<Character,Integer>();
for(int i=0,j=0;i<s.length();i++){
if(map.containsKey(s.charAt(i))){
if(j<(map.get(s.charAt(i))+1))
j=map.get(s.charAt(i))+1;
}
map.put(s.charAt(i),i);
if(max<(i-j+1))
max=i-j+1;
}
return max;
}