题目 3:给定一个字符串,请你给出其中不含有重复字符的最长字串的长度。
示例 1:
输入:"abcabcbb"
输出:3
解释:因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入:"bbbbb"
输出:1
解释:因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入:"pwwkew"
输出:3
解释:因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是子串的长度,"pwke" 是一个子序列,不是子串。
思路
建立两个指针 i
和 j
,作一个滑动窗口,检查
[
i
,
j
)
[i,j)
[i,j) 之间的字符是否有重复的,找到没有重复的字符子串,记录其长度,然后不断比较更新最大值。最后返回不含重复字符的最长子串的长度。具体代码如下:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int i = 0;
int j = 0;
int length = 0;
int result = 0;
while (j < s.size())
{
char tmpChar = s[j];
for (int k = i; k < j; k++)
if (tmpChar == s[k])
{
i = k + 1;
length = j - i;
break;
}
j++;
length++;
result = max(result, length);
}
return result;
}
};
提交情况如下: