leetcode最热HOP100--P3无重复字符的最长字串(c语言)(简单解法)(滑动窗口)

leetcode最热HOP100--P3无重复字符的最长字串(c语言)(简单解法)(滑动窗口),第1张

目录

问题:

代码

       思路

最后(笔者的絮絮叨叨)


问题:

                给定一个字符串 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]的数组在对应的位置记录子字符串的情况。我们遍历数组,每走一步,我们就判断是否有重复字符,但是我发现这样的话,在判断出有重复字符时,我无法找出前面对应的重复字符的位置。也就无法让循环跳转到那个位置继续子串的判断。:(

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1352607.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-14
下一篇 2022-06-14

发表评论

登录后才能评论

评论列表(0条)