中等 最长无重复字符的子串
给定一个字符串,请找出其中无重复字符的最长子字符串。
您在真实的面试中是否遇到过这个题?
Yes
样例
例如,在"abcabcbb"
中,其无重复字符的最长子字符串是"abc"
,其长度为 3
。
对于,"bbbbb"
,其无重复字符的最长子字符串为"b"
,长度为1。
思路:遍历字符串记录无重复字符的下标,当遇到重复的时候拿当前下标减去起始下标。用到map记录字符下标;
代码:
class Solution {
public:
/**
* @param s: a string
* @return: an integer
*/
int lengthOfLongestSubstring(string s) {
// write your code here
int len = s.size();
if (len <= 1)
return len;
int max = 0;
for (int i = 0; i < len; ++i) {
map<char, int> mp;
mp[s[i]] = i+1;
int j = i+1;
while (j < len &&mp[s[j]] <= 0)
mp[s[j++]] = j;
if (max < j-i)
max = j-i;
if (mp[s[j]] > 0) //有重复,从重复的下一位开始遍历
i = mp[s[j]]-1;
}
return max;
}
};