物联网
您现在所在的位置:首页>企业动态>物联网

力扣题库3. 无重复字符的最长子串

编辑:学到牛牛IT培训    发布日期: 2023-09-11 09:05:39  

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


1694394415100.jpg


示例1:

输入: s = "abcabcbb" 

输出: 3 

解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。


示例2:

输入: s = “bbbbb”

输出: 1

解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

 

题解:

题目要求我们选择最长无重复的子串,首先得明白子串和子序列的区别

子串为字符串中连续的字符,是不可被分割的

子序列为字符串中的字符,是可被分割的

基本思想:定义两个指针分别指向当前无重复字符串的首和尾,然后蠕动遍历全部字符。

第一步:分别定义头、尾指针都指向字符串的首字符

第二步:尾指针先向后一步,检查前面有没有与尾字符重复的字符,有则将头指针移到重复的字符的下一位

第三步:通过第2步获得了新的无重复字符串,根据头尾指针计算长度并记录,重复第二步直到遍历结束

第四步:返回最大的长度


完整代码:

#include <stdio.h>


int lengthOfLongestSubstring(char *str)

{

    char *trail = str;   //  定义尾指针指向字符串的首字符

    char *head = str;   //   定义头指针指向字符串的首字符

    int max = 0;    //  定义一个整型变量用来存储字符串中子串的最大长度

    while (*trail != ‘’)  // 当尾指针指向字符串结束符‘’则退出循环

    {

        char *fp;

 // 再次定义一个指针fp指向头指针指向的字符串的字符,但是不能等于或者超过尾指针指向的字 符串的字符,蠕动遍历当前的无重复子串

        for (fp = head; fp < trail; fp++)

        {

  // 判断指针fp当前指向的字符串的字符是否恒等于尾指针指向的字符串的字符,如果恒等于则表示该无重复子串遍历结束,将头指针移到fp当前指向的字符串的字符的下一位


            if (*fp == *trail)    

         {

                head = fp + 1;

                break;

            }

        }

        max = trail - head + 1 > max ? trail - head + 1 : max; // 算出最长子串的长度

        trail++;

        }

    return max;  // 返回最大长度

}

int main()

{

    char str[] = {"aaaabcaaba"};

    int max = lengthOfLongestSubstring(str);

    printf("max = %d ",max);

    return 0;

}


 


免费试学
课程好不好,不如实地听一听

封闭学习

2

1

联系我们

电话:028-61775817

邮箱:1572396657@qq.com

地址:成都市金牛区西城国际A座8楼

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
    物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

    扫一扫,免费咨询

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
    物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

    微信公众号

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

学一流技术,找高薪工作

物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

7-24小时服务热线:

028-61775817

版权声明 网站地图

蜀ICP备2021001672号

课程问题轻松问