leetcode Longest Substring Without Repeating Characters

题意:给定一个字符串s,找出s中的一个最长子串t,在t中没有重复的字符。

思路:使用两个指针i和j,开始都指向第一个字符,向后移动j,直到发现j所指向的位置出现过一次。查看j - i的值是否是当前最大的,是的话更新保存的最大值。然后移动i,直到s[i] == s[j]停止,在移动过程中将i移动过程中记录的s[i]出现次数重置为0。然后重复j的移动,直到j大于字符串的长度。

代码实现

#include <cstring>
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
    int len = s.size(), i, j, ans;
    bool mark[300];
    memset(mark, false, sizeof(mark));
    i = j = ans = 0;
    while(j < len)
    {
    	if(mark[s[j]])
    	{
    		if((j - i) > ans)
    			ans = j - i;
    		while(s[i] != s[j])
    			mark[s[i ++]] = false;

    		i ++;
    		j ++;
    	}
    	else
    	{
    		mark[s[j]] = true;
    		j ++;
    	}
    }
    ans = max(ans, len - i);   
    return ans;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值