转载自:https://blog.csdn.net/qq_32805671/article/details/79902329
题目地址:https://leetcode-cn.com/problems/add-two-numbers/description/
给定一个字符串,找出不含有重复字符的 最长子串 的长度。
示例:
给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。
给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。
给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列 而不是子串。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
map<char, int> m;
int ret = 0;
int start = 1;//设置起始点
char c;
for(int i=1;i<=s.size();i++){
c = s[i-1];
if(m[c]>=start){//发现map中已经存在该字符
start = m[c] + 1;//更新起始点,从该字符的下一个字符为起始点
}
else{
ret = max(ret, i - start + 1);
}
m[c] = i;
}
return ret;
}
};
定义一个字符和索引的映射map,然后遍历字符串,因为map中的关键字不能重复,所以在遍历的时候发现如果map中已经含有该关键字,则更新该关键字的索引并将该关键字之前一次索引的下一个位置定为新的起始点start,然后继续遍历。