输入一个字符串,找到其中最长的没有重复元素的子串,输出其长度
一个输出一个字符串,找到长度最长的子串,而且该子串中没有重复字符,输出所求子串长度。
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);
}