题目:
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.
思路:
LeetCode中map真的很有用!!!!!灵活掌握map的使用方法对于很多问题都会很快的有思路。这道题也可以采用map的方法,以字母作为键,其所在位置为值。没有出现重复字母时,长度逐一增加,当出现重复字母时,找到重复字母上一次出现的位置,并以其下一个位置作为起点,计算长度,另外起点只能不断靠后,而不能向前(这是显而易见的),因此需要有一个max来限定起始位置pos的赋值。另外有一点需要注意的是,当给重复字母重新赋值时,insert()不起作用,因此采取直接赋值的方法(hash_map[s[i]-'a'] = i+1)。
代码:
class Solution {
public:
int lengthOfLongestSubstring(string s)
{
map<int,int> hash_map;
int pos=0,len=0;
for(int i=0;i<s.length();i++)
{
if(hash_map.count(s[i]-'a'))
{
pos = max(hash_map[s[i]-'a'],pos);
hash_map[s[i]-'a'] = i+1;
}
len = max(len,i-pos+1);
hash_map.insert(pair<int,int> (s[i]-'a',i+1));
}
return len;
}
};