首页 > 其他分享 >无重复字符的最长子串

无重复字符的最长子串

时间:2024-04-07 21:33:55浏览次数:25  
标签:子串 字符 下标 int while 字符串 最长

给定一个字符串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);

}

 

 

标签:子串,字符,下标,int,while,字符串,最长
From: https://www.cnblogs.com/tkmi/p/18119970

相关文章

  • python 字符串的操作
    #字符串拼接str1="Hello"str2="World"combined_str=str1+""+str2print(combined_str)#字符串重复str1="Python"repeated_str=str1*3print(repeated_str) #根据字符串索引取值str1="Hello"char=str1[1]#......
  • 掌握Linux内核技能:创建你的第一个字符设备驱动
    Linux字符设备驱动简介在Linux系统中,设备驱动是操作系统的重要组成部分,负责在用户程序和硬件设备之间提供接口。设备驱动可以分为字符设备驱动和块设备驱动,本文将重点介绍字符设备驱动的基本概念和实现方法。1.字符设备驱动概念字符设备是指那些以字符为单位进行数据传......
  • 两个字符串间的最短路径问题【华为OD机试】(JAVA&Python&C++&JS题解)
    一.题目-两个字符串间的最短路径问题给定两个字符串,分别为字符串A与字符串B。例如A字符串为ABCABBA,B字符串为CBABAC可以得到下图m*n的二维数组,定义原点为(0,0),终点为(m,n),水平与垂直的每一条边距离为1,映射成坐标系如下图。从原点(0,0)到(0,A)为水平边,距离为1,从(0,A)......
  • 【字符串】Manacher
    Manacher算法的本质是计算以字符串中的“每个字符”和“每两个相邻字符之间的空隙”作为对称中心的最大回文串的长度。所以利用这个性质可以解决一系列与子串是否是回文串、子串有多少是回文串的问题。namespaceManacher{constintMAXN=1.1e7;intn;chars[MAXN+10];......
  • 最长上升子序列——二分法
    前置设lowilow_ilowi​:长度为......
  • aardio教程五) 写Python风格的aardio代码(字符串篇)
    前言熟悉一个新的语言最麻烦的就是需要了解一些库的使用,特别是基础库的使用。所以我想给aardio封装一个Python风格的库,Python里的基础库是什么方法名,aardio里也封装同样的方法名。这样就不需要单独去了解aardio里一些方法的使用细节,可以很方便的将Python代码改成aardio代码。......
  • C++基础——字符串(C语言和C++的字符串风格区别)
    C语言风格的字符串字符串通常是以字符数组或字符指针的形式表示的。字符串以空字符('\0')结尾!!!两种形式:(1)字符指针形式的字符串charstr[]="HelloC++";(2)字符数组形式的字符串char*ptr="HelloC++";C风格字符串的运算运算需要使用string函数,需要加入头文件<stri......
  • Java-字符知识扩展
    4.6字符扩展1.字符的强制转换所有的字符本质还是数字2.转义字符:3.布尔值扩展搬砖好累呜呜呜......
  • 调换任意字符串位置
    对任意字符串取反,就是首元素和尾元素依次调换,最关键就是要调换几次。先用(需要#inclide<string.h>头文件)strlen()获取字符数组的字符长度,再通过取中间数。例如字符长度为3,则需要循环3/2次,就是一次,只需将下标为0和下标为2的元素对换就可以了。互换过程:char c[3]={0};chart=c[......
  • 128.最长连续序列
    题干给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4。示例2:输入:nu......