您的位置:首页 > 其它

Longest Substring Without Repeating Characters--最长无重复字符串(重)

2014-06-20 23:59 381 查看
这个真没搞太懂 改天搞

题意: 最长的吴重复字符子串

当时我的思路是,利用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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐