Longest Substring Without Repeating Characters

来源:互联网 发布:北师大网络教育会计学 编辑:程序博客网 时间:2024/06/05 15:27

这是一个字符串问题。

思路方案,利用一个长度为255的数组,下标代表出现的字符,值对应上次出现的位置。

遍历字符串的时候会出现两种情况,

1.该字符串没有出现过:

   记录下字符串出现的位置,计算目前子串的长度。

2.该字符串出现过:

    判断上次是否是出现在当前子串中。

    a.如果不在当前子串:

计算子串长度。

    b.如果在当前子串:

   计算子串的长度,更新该字符的位置记录,重定位子串起始位置。


代码如下:

class Solution {
public:
int lengthOfLongestSubstring(string s) {
int flag[128];
int left = 0, maxLen=0,lenth = s.length(),len =0;


memset(flag, -1, sizeof(flag));
for (int i = 0; i < lenth; i++)
{
if (flag[s[i]] != -1)
{
if (flag[s[i]]>=left)
{
len = i - flag[s[i]];
left = flag[s[i]]+1;
}
else
{
len = i - left + 1;
}
flag[s[i]] = i;

}
if (flag[s[i]] == -1)
{
flag[s[i]] = i;
len = i - left+1;
}
if (len>maxLen)
{
maxLen = len;
}
}
return maxLen;
}
};

0 0