Given a string, find the length of the longest substring without repeating characters.
Example 1:
Input: "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
Example 2:
Input: "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.
Example 3:
Input: "pwwkew"
Output: 3
Explanation: 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.
题目大意:
给定一个字符串,找到无重复字符的最长子串的长度。
提示:是找子串而不是子序列。
解题思路:
第一,要找到最长,肯定得把字符串遍历完。第二,题目限定不可重复,很容易想到一个对应的数据结构——set。具体思路是遍历字符串,检查当前字符串是否在set里面,如果不存在则插入set,并且将当前set的长度与最长串的长度作比较,取最大值;如果set里已存在该字符,基于set结构的不重复特性,逐渐从开头删除字符直到无相同字符。
解题代码:
class Solution {
public:
int lengthOfLongestSubstring(string s)
{
set<char> t;
int res = 0;
for (int i = 0,j = 0; i < s.size(); ++i)
{
if (t.find(s[i]) == t.end())
{
t.insert(s[i]);
res = max(res, (int)t.size());
}
else
{
t.erase(s[j++]);
}
}
return res;
}
};