目录
问题:
代码
思路
最后(笔者的絮絮叨叨)
问题:
给定一个字符串
s
,请你找出其中不含有重复字符的 最长子串 的长度。
(我们先看看ac代码)
代码 int left = 0; //左窗口
int right = 0; //右窗口
int i,j;
int len = strlen(s); //计算字符串长度,便于之后判断是否结束遍历
int max = 0; //存放最长的无重复字符的子字符串的长度
//用于判断一串字符串是否出现重复字符
int havesamechar=0;
// 让左右窗口进行滑动,直到字符串结束
for( i = 0 ; i < len ; i++ ){
havesamechar = 0;
for( j=left ; j
(题解来自于leetcode上名为我自横刀向天笑,id为goodgoodday)
这段代码用到的解题思想是滑动窗口算法。
思路用两个变量分别来不断地在字符串上滑动,也是就是不断指向字符串。本段代码左窗口是left和右窗口是right
先让右窗口进行滑动,每滑动一次,就得让左窗口以及他们之间的所有字符跟右窗口进行判断,检查是否有相同的字符。若是发现有相同字符,我们就让左窗口直接跳转到和右窗口相同字符的下一个字符,然后继续让右窗口滑动。
最后(笔者的絮絮叨叨)这题写了我半天,最开始看到这题时我就有思路了。我的想法:因为每一个字符都有自己唯一的十进制的ASCII码,且恰好这是一个字符串,可以让一个长度为a[127]的数组在对应的位置记录子字符串的情况。我们遍历数组,每走一步,我们就判断是否有重复字符,但是我发现这样的话,在判断出有重复字符时,我无法找出前面对应的重复字符的位置。也就无法让循环跳转到那个位置继续子串的判断。:(
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)