LeetCode3.无重复字符的最长子串

这道题目主要考察对字符串的理解

首先是我自己解题,写的太过复杂效率很低,虽然能运行成功但是运行速度低而且占用内存也挺大,这里可以当做反面教材了,以后写代码能优化尽量优化

int lengthOfLongestSubstring(char* s)
{
    char* p1 = s;
    char* p2 = s;
    int j = strlen(s);
    int count = 0;
    int max = 0;
    int flag = 1;
    int num = 0;
    while (j--)
    {
        while (*(++p1) != *s && flag && *p1 && ++num)
        {
            count++;int i = 0;
            for(i=0;i<num-1 && flag;i++)
            {
                if (*(s + i) == *p1)
                    flag = 0;
            }

        }
        p1 = p2+1;
        p2+=1;
        flag = 1;
        if (count >= max)
        {
            max = count + 1;
        }
        count = 0;
      
    }
    return max;
}

然后去看了其他人的解题思路,的确很清晰,代码也很简洁,这里我们先分析一个

定义left和right,left代表最长字串的第一个字母,而right的作用就是计算字串长度。逐步分析的话就是先计算字符串长度,然后循环len次,定义一共标识变量same,通过赋值的形式来判断是否有重复字符,如图,当s[j]== s[right],就意味着有重复字符了,然后让left=j+1,再保存遇到重复字符前的长度,存储在max中,right-left+1就意味着两者之间字符串的长度,left = j+1意思就是从重复字符的下一个再进行以上计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我真的很困1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值