LeetCode算法练习之无重复字符的最长子串

32 篇文章 0 订阅

同样是双指针法,一个指针使得字符串变长,一个使得字符串变短。分析问题可知我们可以让两个指针都从字符串开头开始,然后都向右移动。满足条件,就移动右指针使得字符串变长看看是否还满足条件,一旦条件不满足,就移动左指针使得字符串变短,满足条件。

求解这道题,还利用了字符字典。但是这里的字典由于键只有固定的26个英文字母,可以使用简化的散列表(就是一个数组)来进行查询,在常数时间内判断出字符串内是否存在这个字母。

还有一个很重要的问题,java等高级语言定义变量的时候会自动初始化分配到的内存空间,而C++不会,每个变量必须在定义的时候初始化,也就是赋值,不然就会是内存中原来的值。如果不进行人工初始化,就会出现执行成功,但是提交失败的情况。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if(s.size()==0)return 0;
        int right=1;
        int left=0;
        int len=1;
        int res=1;
        int exist[128];
        for(int i=0;i<128;i++)exist[i]=0;
        exist[s[left]]=1;
        while(right<s.size()){
            if(exist[s[right]]==1){
                while(exist[s[right]]==1){
                    exist[s[left]]=0;
                    left++;
                    len--;
                }
            }
            exist[s[right]]=1;
            right++;
            len++;
            if(len>res)res=len;
        }
        //len++;if(len>res)res=len;
        return res;
    }
};

又是一个完美的分数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值