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.
一开始不能好好理解题目的意思,被最后一句话迷惑,实际题目的意思就是找相邻之间不重复输出最大长度。题目还需多加练习,对于数据结构的内容理解不深,map应该是一种很好用的东西。
#include<iostream>
#include<string>
#include<unordered_map>
#include<utility>
using namespace std;
class Solution {
public:
int lengthOfLongestSubstring(string s)
{
unordered_map<char, int> map;
int maxlen = 0;
int i, j = -1,c;
int len = s.size();
for (i = 0; i < len; i++)
{
while (j < len - 1)
{
j++;
c = s[j];
if (map.find(c) != map.end())
{
j--;
break;
}
else
map.insert(pair<char, int>(c, 1));
}
maxlen = maxlen > j - i + 1 ? maxlen : j - i + 1;
c = s[i];
if (map.find(c) != map.end())
{
map.erase(c);
}
}
return maxlen;
}
};
int main()
{
string s = "abcabcbb";
Solution a;
int length;
length=a.lengthOfLongestSubstring(s);
cout << length;
getchar();
return 0;
}