这个真没搞太懂 改天搞
题意: 最长的吴重复字符子串
当时我的思路是,利用have数组来记录当前字符最近一次出现的位置,假定从Position 之后的字符串都是无重复的。
如果遍历到的当前字符的have[s[i]] 小于position,那么说明该字符在position之后没有出现过,无重复,那么更新have[s[i]] = i 当前的位置。
如果遍历到的当前的字的have[s[i]] 大于position, 那么说明该字符在position之后出现重复,需要计算该段无重复字符串的长度 = i - position。 同时,更新position为该重复出现的字符的上一次出现的位置 position = have[s[i]]。 更新该字符的新位置have[s[i]] = i; 更新最大值。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int have[256], len,len1,len2;
int max = 0, position = 0;
memset(have,0,256*sizeof(int));
for(int i = 0; i < s.length(); i++)
{
if(i == s.length()-1)
{
if(have[s[i]] <= position)
{
len = i+1-position;
max = len > max ? len : max;
}
}
if(have[s[i]] <= position)
{
have[s[i]] = i+1;
}
else
{
len = i-position;
max = len > max ? len : max;
position = have[s[i]];
have[s[i]] = i+1;
}
// cout << i+1 << "\t" << s[i] << "\t" <<max << "\t" << position << endl;
}
return max;
}
};