Given a string, find the length of the longest
substring without repeating characters.
本题求最长不重复子串
思想很朴素,最外层循环遍历字符串,次外层循环从外层循环当前字符位置i的后一位字符开始遍历,判断其位置j上的字符与它之前的字符是否有重复,为了遍历其之前的字符,就有了第三层循环。
s[j]一旦与前面的字符s[k]相同,跳出内层循环,且当s[k]是不同于s[j]的字符时继续跳出次外层循环,最外层循环变量自加1,从下一个字符开始寻找最长不重复子串。当s[j]与前面的字符没有重复即k=j-1时,子串长度加1。最后将此次遍历得到的不重复子串长度len与max_len比较,取较大的。经过字符串的完全遍历,最终得到字符串的最长不重复子串。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int num = s.length();
int max_len = 1;
if(num == 0)
return 0;
for(int i = 0; i < num; i++){
int len = 1;
for(int j = i + 1; j < num; j++){
int k = i;
for(; k < j; k++){
if(s[j] == s[k]){
break;
}
if(k == j - 1)
len++;
}
if(s[j] == s[k] && k != j){
break;
}
}
if(max_len < len)
max_len = len;
}
return max_len;
}
};