最长不含重复字符的子字符串
描述:
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
题解:
维护一个map用来存放遍历到的字符以及下标
maxlen用来存放最大的长度值
curlen用来存放现在正在遍历的不重复字符串的长度
存在三种情况:
- 当前字符没有出现过,也就是map中没有这个字符的信息,此时curlen++
- 当前字符减去上一次该字符出现的下标大于curlen,说明该字符上一次字符出现的时候在上一个计算的不重复字符串中,也就是这一个字符并没有重复,curlen++
- 当前字符在这次不重复字符串的计算中已经出现过,说明已经出现重复了,curlen=i-index
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return int整型
*/
int lengthOfLongestSubstring(string s) {
// write code here
map<char, int> index;
int maxlen=0,curlen=0;
for(int i=0;i<s.length();i++){
if(index.find(s[i])==index.end()){
curlen++;
}else if(i-index[s[i]]>curlen){
curlen++;
}else{
curlen=i-index[s[i]];
}
if(curlen>maxlen){
maxlen=curlen;
}
//如果没有出现过就是向index中添加元素,出现过就是更新index值
index[s[i]]=i;
}
return maxlen;
}
};