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.
解题方法:
我的方法是二重循环,第一遍从字符串的首位开始,把首位加到一个空字符串temp中, 若下一位不在temp中,则将下一位加入到temp中继续向下,若下一位在temp中则停止,记录temp的长度为length。接着将temp赋值为空字符串,从第二位开始重复首位的操作,比较length与temp的长度,将length赋值为二者较大的数。这样一直循环到最后一位。
这次用到了字符串的find函数,当字符串中找不到某个字符串时,会返回18446744073709551615这个值
题目详细代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
string temp = "";
int len = 0;
for (int i = 0; i < s.length(); i++) {
temp = "";
temp += s[i];
for (int j = i+1; j < s.length(); j++) {
if (temp.find(s[j]) != 18446744073709551615) {
break;
} else {
temp += s[j];
}
}
len = len > temp.length() ? len:temp.length();
}
return len;
}
};
public:
int lengthOfLongestSubstring(string s) {
string temp = "";
int len = 0;
for (int i = 0; i < s.length(); i++) {
temp = "";
temp += s[i];
for (int j = i+1; j < s.length(); j++) {
if (temp.find(s[j]) != 18446744073709551615) {
break;
} else {
temp += s[j];
}
}
len = len > temp.length() ? len:temp.length();
}
return len;
}
};
复杂度分析:
最坏的情况下:temp.find(s[j])== 18446744073709551615,时间复杂度为O(n^2/2)
最好的情况下:temp.find(s[j])!= 18446744073709551615,j = i+1,时间复杂度为O(n)