思路:保持二个指针,i是慢指针,也就是最长字符串的开始位置,j表示当前查找的位置。indexOf函数,从i到j-1,搜索s[j]出现的位置,如果没有出现返回-1,如果出现了,返回匹配位置。当这个字符在前面出现的时候,j-i就是当前的最长子串的长度。然后i设置为匹配位置的下一个位置,从新开始查找。代码如下。
public class Solution {
public int lengthOfLongestSubstring(String s) {
if(s==null)
return 0;
if(s.length()<2)
return s.length();
int i=0,maxlen=1;
int len=s.length();
for(int j=1;j<len;j++){
int index=indexOf(s,i,j);
if(index>-1){
if(j-i > maxlen){
maxlen=j-i;
}
i=index+1;
}
}
if(len-i > maxlen){
maxlen=len-i;
}
return maxlen;
}
//from--to-1
private int indexOf(String s,int from,int to){
for(int i=from;i<to;i++){
if(s.charAt(i) == s.charAt(to))
return i;
}
return -1;
}
}