[leetcode算法题]无重复字符最长字串解法与疑问

题干描述:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度

示例:

输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。   请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。


个人解决代码与运行耗费时间与空间:

个人思路是创建一个256大小的char辅助数组。再从目标字符串的第一个字符开始遍历,如果这个字符第一次出现,就把他的ASCII码值对应的辅助数组位置里的元素改成1,如果某个新遍历的字符发现他位置里的元素为1的话,就代表这个字符出现过,再从下一个字符开始遍历。期间记录下来最长字串长度max。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
	    if(s.size()==0) return 0;
        int res=1;
        
        for(int i=0;i<s.size();i++){
            char temp[256]={'0'}; // 初始化数组
            int max=0;
            int j=i;
            while(temp[(int)s[j]]==NULL){
                temp[(int)s[j]]='0'; // 若字符已经出现过,则对应辅助数组中那个位置改为0
            	j++;
                max++;
            }
            if(res<max) res=max;
         }
        return  res;
    }
};

代码运行时间与内存消耗


 

个人疑问:

其实本来这个执行通过的代码并不是我想的那个代码。本人原本想要执行的代码如下

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
	    if(s.size()==0) return 0;
        int res=1;
        for(int i=0;i<s.size();i++){
            char temp[256]={'0'};
            for(int k=0;k<256;k++){
                temp[k]='0';
            } // 将数组内所有元素初值置为'0'
            int max=0;
            int j=i;
            while(temp[(int)s[j]]=='0'){
                temp[(int)s[j]]='1'; // 某字符第一次出现时,将对应位置改为'1'
            	j++;
                max++;
            }
            if(res<max) res=max;
         }
        return  res;
    }
};

 但这段代码每次运行都会出bug,leetcode给出的错误是

 只可惜本人实在才疏学浅,不知道如何解决,若有大神愿意指点一二,本人必定洗耳恭听 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Grey.yschakk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值