问题描述
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.
比较容易想到的办法是把每个字符遍历一遍,到达一个字符时就向前回溯,添加一个变量repeat记录回溯时遇到相同字符的位置,在下一个字符的回溯时如果也遇到了
相同的字符,则将其位置与repeat对比,若其位置靠后则令其为repeat,如此则可以避免在回溯时回溯的字串中包含相同字符的情况
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int totalLength = s.size();
if (totalLength == 0) {
return 0;
}
if (totalLength == 1) {
return 1;
}
int p = 0;
int backtrack = 0;
int maxLength = 0;
int subLength = 0;
int repeat = -1;
for (p = 0; p < totalLength; p++) {
for (backtrack = p - 1; backtrack >= 0; backtrack--) {
if (s[backtrack] == s[p]) {
if (repeat < backtrack) {
repeat = backtrack;
}
break;
}
}
subLength = p - repeat;
if (maxLength < subLength) {
maxLength = subLength;
}
}
if (maxLength == 0) {
return totalLength;
}
if (maxLength < subLength) {
maxLength = subLength;
}
return maxLength;
}
};