C语言题目练习

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

                            (题目来源:力扣)

引用头文件:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

源代码:

int maxNum(int x,int y){//用于返回两个数中最大的数
if(x > y) return x;
else return y;
}
int lengthOfLongestSubstring(char *s){
int length;//字符串长度
int start,end;//搜索范围的开头、结尾(左侧、右侧)
int i,j;//循环变量
int longest=0;//用以记录无重复字符串的长度

length = strlen(s);
start = 0;
end = start;

if(length==-1) return 0;//字符串中无字符

while(start <= length - 1 && end <= length - 1){
//当搜索范围只有一个字符时,搜索范围向右扩大一段字符
if(start == end) end++;

//搜索当前搜索范围,查看是否有重复字符
if(end < length - 1){
for(i = start ; i < end ; i++){
if(s[i] == s[end]){//范围内每个字符与最右字符比较
start = i + 1;//搜索范围缩小到重复字符右侧(之后)
i = end;//结束循环
}
if(i == end-1){//搜索范围内无重复字符,搜索范围向右扩大一段
longest=maxNum(longest,end-start+1);//记录这次无重复字符串的长度(取其中最大)
end++;//向右扩大一段
i = end;//结束循环
}
}
}

//当搜索范围右侧到达字符串最右侧时,应不同于以上循环体进行搜索
if(end == length - 1){
for(i = start ; i < end ; i++){//有重复字符的处理
if(s[i] == s[end]){
start = i + 1;
}
if(i == end - 1){//无重复字符的处理
longest=maxNum(longest,end-start+1);//记录这次无重复字符串的长度
}
}
break;
}
}
return longest;
}
int main(){
char *str;
int n;

str = (char*)malloc(sizeof(char));

gets(str);puts(str);
n = lengthOfLongestSubstring(str);
printf("%d",n);
}

感想:在力扣上找到的题目,这段代码还有不足之处,还请同学老师能帮忙指出错误、加以修改,之后有时间也会自己再看看,做一下优化。

猜你喜欢

转载自www.cnblogs.com/0430and1225/p/12824018.html