题目:
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.
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_map<char, int> hash;
//这里哈希表可以换为 vector<>, vector的下标就是哈希表里的key;因为这道题目的key足够小 所以 hash表问题可以转化为数组问题
int ans = 0;
int l = -1;
for (int r = 0; r < s.size(); r++)
{
if (hash.find(s[r]) != hash.end())
{
l = max(l, hash[s[r]]);//重点!! 这里左指针不能减小
}
hash[s[r]] = r;
ans = max(ans, r - l);
}
return ans;
}
};
总结:
这里哈希表可以换为 vector<>, vector的下标就是哈希表里的key;因为这道题目的key足够小 所以 hash表问题可以转化为数组问题