1. 题目解析:
找到给定字符串S的不包含重复字符的最大子串的长度
2. 解题思路:
从左往右截取子串,直到遇到重复字符时停止,记录更新最长子串的长度,记录截取子串中与当前重复的那个字符的位置,由于是该字符导致继续往前截取的子串包含重复,因此下次截取子串从该位置开始。直到遍历至剩下的子串长度小于当前记录的最大长度
3. 代码:
public int lengthOfLongestSubstring(String s) {
int maxLen=0;
int startIndex=0;
int end=1;
String cuString="";
//停止条件:剩下的子串长度小于当前记录的最大长度
while( (startIndex+maxLen) < s.length() ){
cuString=s.substring(startIndex,end);
//向右直到遇到重复子串
while( end<s.length() &&
!cuString.contains( s.substring(end,end+1) ) ){
cuString=cuString.concat(s.substring(end,end+1));
end+=1;
}
if( cuString.length() > maxLen ){maxLen=cuString.length();}
if (end>=s.length()) {
break;
}
//下次的左起点是当前导致重复的字符的下一个字符
startIndex=startIndex+cuString.indexOf( s.substring(end,end+1) )+1;
}
return maxLen;
}