字符串最长子串问题 C语言

输入一个字符串,找到其中最长的没有重复元素的子串,输出其长度

一个输出一个字符串,找到长度最长的子串,而且该子串中没有重复字符,输出所求子串长度。
eg

输入 输出
abcabcbb 3

读题:

问题其实很简单,就是要你输入一个字符串,然后找到其中的没有重复元素的子串的最长长度。

思路:

1.从键盘上键入一个字符串
2.判断字符串长度length。(strlen)
3.先用一个i作为子串的前下标,再用一个j作为子串的后下标,再for i(for (i = 0; i < length; i++))里面嵌套一个for j(for (j = i + 1; j < length; j++))。先从字符串第一个开始for i到末尾,for i的时候对j进行for j,然后判断i到j这段子串中有没有重复的元素,一旦当检测到有重复时,子串的长度为i到j的距离,此时暂定最大长度max=j-i,然后跳出j循环,i自加,然后在重复上面的判断过程,如果此次的max大于之前的max,那么以新max为主循环完了后,如果当max一直为0时,这就证明这个字符串中各个元素均不相同,那么直接就输出max=长度length

代码:

#include"stdio.h"
#include"string.h"
int main()
{
    char str[255];
    gets(str);
    int length = strlen(str);//length为字符串总长度
    int max = 0;             //max为最大不重复子串的长度
    int i, j, k, l;
    for (i = 0; i < length; i++)//i为前下标
    {
        for (j = i + 1; j < length; j++)//j为后下标
            for (k = i; k < j; k++)//判断从i到j这段字符串中有没有重复元素
            {
                if (str[k] == str[j])
                {
                    l = j;
                    j = length;
                    k = j;
                }
            }
        if (l - i > max)
            max = l - i;

    }
    if (max == 0)//当max==0时证明整段字符串中没重复元素,此时max=length
            max = length;
    printf("%d\n", max);
}

截图:

运行结果(看红框处)

猜你喜欢

转载自blog.csdn.net/a1203991686/article/details/79920677