(leetcode) Longest Substring Without Repeating Characters

18 篇文章 1 订阅
7 篇文章 0 订阅

Question :

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.


code :

class Solution {
public:
  
int lengthOfLongestSubstring(string s){
      if(s.size()<=1) return s.size();
     int A[256];
     int start = 0,Max = 0;
     int len = 0;
     //bool flag = false;
     for(int i = 0;i<256;i++)
         A[i]=-1;

     for(int i = 0;i<s.size();i++)
     {
         if(A[s[i]] >= 0)
         {
             //flag = true;
            // len = i-start;
             int j = A[s[i]];
             for(;start<=j;start++)
                A[s[start]] = -1;
         }

         //if(Max<len&&flag == true) Max = len;
         //if(flag ==false&&Max<(i-start +1))
         if(Max<(i-start +1))
         {
             Max = i - start +1;
         }

         A[s[i]]=i;
     }
    return Max;
 }


};

思想:运用一个start记录当前没有重复字母的字符串的头节点。

1、用字母自身作为下标,刚开始只考虑了26个字母,结果提交上去错误,说包含‘,’之类的字符实例不通过。所以这里是申请256大小的int 数组,存储每一个字符所在的下标。

2、若该字母没出现过则存储下标,并计算当前字母到起始字母start的长度,并跟max比较,比max大,则替换max。

3、出现过,则将该A[s[i]]的下一位记为start。并将前一start到当前start中间的字母置为未出现。之后重复操作。


注:

1、刚开始的想法是遇到s中第i个字母不是第一次出现,则记录当前len长度,len = i - start;

2、如果没遇到相同的字母则len = i- start +1;

但是发现者这样略麻烦,因为i处字母不是第一次出现说明start到i-1处字母都是第一次出现,这个长度已经计算过并跟Max进行了比较,所以在i再次计算就是重复计算了,这里可以省去。



    


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值