link: Longest Substring Without Repeating Characters
题目:
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
注意点:
注意,如果使用两层从0到size的for循环,会导致时间复杂度过大,考虑将外层循环变量i跳值,从重复的字符的下一个开始取。
源码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int max = 0;
int size = (int)s.size();
string newS = "";
for (int i=0; i<size-max; i++) { //如果i到最后一位的距离已经小于max,则没有必要继续
for (int j=i; j<size; j++) {
newS = s.substr(i, j-i+1);
int count = (int)newS.find(s[j+1]);
if (count >= 0) {
if (newS.size() > max) {
max = (int)newS.size();
}
i = i + count;
break;
}
newS = s.substr(i, j-i+2);
}
if (newS.size() > max) {
max = (int)newS.size();
}
}
return max;
}
};