方法一 暴力法
一旦相等就将i变为k+1,并跳出循环,最后统计最大长度
class Solution {
public int lengthOfLongestSubstring(String s) {
int i=0,j,k,l=0;
char[] a=s.toCharArray();
for(j = 0;j<a.length;j++){
for(k = i;k<j;k++)
if(a[k]==a[j]){
i = k+1;
break;
}
if(j-i+1 > l)
l = j-i+1;
}
return l;
}
}
方法二 模拟哈希表双指针法
利用int数组模拟哈希表,因为字符可能来自ascall码所以开到足够大,当当前的test数组等于2,就循环将i向后移动。
class Solution {
public int lengthOfLongestSubstring(String s) {
if(s.length()==0||s.equals("")) return 0;
int max=Integer.MIN_VALUE;
int[] test=new int[256];
for(int i=0,j=0;j<s.length();j++){
test[s.charAt(j)-' ']++;
while(test[s.charAt(j)-' ']==2){
test[s.charAt(i++)-' ']--;
}
max=Math.max(j-i+1,max);
}
return max;
}
}