无重复字符的最长子串

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

例如字符串abcabcd

子串分为abc  abcd

abcd的长度最长。

思路:将一个字符串分为多个子串,用二维数组存储起来,最后利用strlen()获取子串长度,超出最长子串。

第一阶段:将字符串分为多个子串。

可以用二维数组来存储子串,暂用 int i来当子串的下标。

利用for循环来更换子串:for (int i = 0; i >= 0; i++)

 

第二阶段:如果把输入的字符串放入子串内。

根据题目条件,它不允许子串中有重复字符,

因此我们可以对字符串的每一个字符进行判断,

通过循环判断:如果子串里没有字符串的字符相同的字符,那么就将他加入子串,否则就终止循环,切换下一个子串。

复制代码
     int x = 1;判断值
        int b = 0;//子串的存储下标每个子串都是从0下标存储的
        while (x)
        {第一次循环用于遍历字符串的值,
            int a = 0;//a的值是下标1,用于第二次判断字符串的字符是否与子串里的每一个字符相等
            while (a <= strlen(cc[i]))strlen(cc[i])是指每个子串的长度,此处的while()用于字符串的子串跟子串里的每一个字符进行比较
            {//判断是否添加
                if (t[j] == cc[i][a])
                {
                    x = 0;
                    break;如果字符串的字符跟子串的字符相等,直接退出,进入第二个子串里
                }
                else if (t[j] == '\0')用于字符串的最后一个字符,如果满足条件,全部循环都将终止。
                {
                    x = 0;
                    i = -2;控制for()
                break;
                }
                a++;
            }

            if (x)如果字符串的字符跟子串里的每一个字符都不相符,就把字符赋值到子串中
            {
                cc[i][b] = t[j];
                b++;
                j++;
            }
            else
                x = 0;
        }
复制代码

第三阶段:比较每个子串的长度,找出最大值。

利用strlen()

int a=0;

int i=0;

while(1){

if(i<strlen(cc[i])

i=strlen(cc[i]);

else if(strlen(cc[i])==0)

break;

i++

}

整体代码

复制代码
#include<stdio.h>
#include<string.h>

void main()
{
    char cc[100][100] = { 0 }, t[100] = { 0 };
    int j = 0;//输入的字符串的下标
    scanf("%s", t);

    for (int i = 0; i >= 0; i++)
    {//分数组

        int x = 1;
        int b = 0;//存储下标
        while (x)
        {//添加元素,便利出入字符串的元素
            int a = 0;//比较字符的下标


            while (a <= strlen(cc[i]))
            {//判断是否添加,通过与二维的一维数组比较
                if (t[j] == cc[i][a])
                {
                    x = 0;
                    break;
                }
                else if (t[j] == '\0')
                {
                    x = 0;
                    i = -2;
                break;
                }
                a++;
            }

            if (x)
            {
                cc[i][b] = t[j];
                b++;
                j++;
            }
            else
                x = 0;
        }
    }
            int q = 0;
            int max = 0;
            while (1)
            {
                if (max < strlen(cc[q]))
                {
                    max = strlen(cc[q]);
                }
                else if (strlen(cc[q]) == 0)
                    break;
                q++;
            }
            printf(" %d", max);

}
复制代码

 

 

posted @   不知名de菜鸟  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示