题目链接:click~
/*题意:一个字符串,求不含有重复字母的最长子串的长度*/
/**
*思路: 用v[]记录字母出现的位置。扫描字符串时,如果该字符
* 已经出现过,且出现的位置在开始位置之前,更新开始位置。
*/
class Solution {
public:
int lengthOfLongestSubstring(string s) {
vector<int> v(256, -1);
int start = 0;//开始位置
int maxLen = 0;
int len = s.size();
for(int i = 0; i < len; i ++) {
int k = s[i];
if(v[k] != -1 && start <= v[k]) {//字符已经出现过且在开始位置之前
start = v[k] + 1;//开始位置+1
}
v[k] = i;
maxLen = max(maxLen, i-start+1);
}
return maxLen;
}
};