LeetCode刷题记录3.无重复字符的最长子串

题目:

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

思路:

  定义一个新的字符数组new用来存放当前不重复的字符,令i遍历s字符串,初始时将s[i]放入new。让j = i+1开始,比较s[j]和new中的字符,如果s[j]和new中的字符都不相等,就把s[j]放进去,并且j向后移动;如果遇到s[j]和new中字符有相等的了,那么就保存new中字符个数,与max比较,留大的,然后清空new,i向后移动,重复上述步骤。

例如,初始时i = 0,那么new = {a},count = 1(count为new中元素个数),j = i+1=1,s[j] = b 不属于new,

                             那么 new = {a,b},count = 2. j继续向后移,s[j] = c不属于new,

                              那么new={a,b,c},count=3. j继续向后移,s[j] = a属于new, 此时count > max ,需要更新max值

       i向后移,i = 1,那么 new={b},count = 1.s[j] = c不属于new.j++

                                new = {b,c},count = 2.s[j]=a不属于new.j++

                               new = {b,c,a} count = 3.s[j] = b属于new .count = max 不用更新new

                   i = 2 ,......

 i只需要遍历到length-max就可以了。因为最后剩的长度如果比max小,就没啥再算的必要了

非常的暴力。。。小白只能这个样子了(╥╯^╰╥)

代码:

int lengthOfLongestSubstring(char * s){
        int i,j;
        int length =  strlen(s);
        int max = 0;
        char new[length+1];
        for(i = 0;i < length-max;i++)
        {
            new[0] = s[i]; 
            int count = 1;
            for(j = i+1;j < length;j++)
            {
                int t;
                for(t = 0;t < count;t++)
                     if(new[t] == s[j])
                     {
                        if(count >max)
                            max = count;
                         break;
                     }      
                if(t!=count) break;
                new[count] = s[j];
                count++;
            }
            if(count >max)
                    max = count;
        }
        return max;
        
}

要点:

1.计算字符串长度:strlen(s)

2.max要从0开始,因为有字符串味空的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值