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

这是一个关于字符串处理的问题,目标是找到给定字符串中没有重复字符的最长子串的长度。提供的解题思路使用了暴力求解方法,通过遍历字符串并使用字符数组记录不同字符,遇到重复字符时更新结果。代码实现了一个简单的滑动窗口概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

示例 1:

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

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

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

提示:

0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成



解题思路:

我只会用笨方法,暴力求解。

从字符串的第0个字符开始查找,每次查找都用一个字符数组来存放出现的不同字符,查找过程中遍历该字符数组,如果新字符与之前存放的字符都不同,就继续存放,如果相同就终止,并比较此时字符数组的下标(不同字符的个数)与无重复子串的最大长度max(初始化为0),若前者更大,则将max更新,否则不变,之后从字符串的第1个字符开始查找……重复执行上述操作,直到s字符终止。

代码如下:

#define         N       50000
int lengthOfLongestSubstring(char * s)
{
    int i,len,k,m,max=0,n;
    len=strlen(s);
    char notes[N];
    for(i=0;i<len;i++)
    {
        k=i;n=0;
        while(s[k]!='\0')
        {
            if(k==i)
            {
                notes[n++]=s[k];
            }
            else
            {
                for(m=0;m<n;m++)
                {
                    if(s[k]==notes[m])
                        break;
                }
                if(m<n)
                {
                    break;
                }
                else
                {
                    notes[n++]=s[k];
                }
            }
            k++;
        }
        if(n>max)
            max=n;
        if(max>=len-i)
            break;
    }
    return max;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值