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

这个真没搞太懂 改天搞


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


当时我的思路是,利用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;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值