记录下大致思路,不一定是优解:
1、首先初始化开始计算的位置startIdx,上次最大长度lastMaxLength,本次最大长度maxlength
2、首先从字符串第一个字符即下标位置位0开始遍历
3、判断是否在该下标之前遍历开始下标及之后存在重复的字符,如果出现,则判断maxLength与lastMaxLength大小,如果大于lastMaxLength则把maxLength赋值给lastMaxLength,同时开始下标startIdx为出现的位置后一个开始,最大长度maxLength也从出现位置之后开始到当前位置的长度;
4、如果不存在,则最大长度maxLength加1;
5、返回前判断本次与上次长度大小,返回大的;
代码如下:
public static int lengthOfLongestSubstring(String s) {
int lastMaxLength = 0;
int startIdx = 0;
int maxLength = 0;
for(int i = 0; i < s.length();i++){
char c = s.charAt(i);
if ("".equals(c)){
break;
}
int idx = s.s.indexOf(c, startIdx);
if (idx != -1 && i > idx){
lastMaxLength = maxLength;
startIdx = idx+1;
maxLength = i-idx;
}else{
maxLength ++;
}
}
if (lastMaxLength > maxLength){
return lastMaxLength;
}
return maxLength;
}