求字符串的不重复字符的最长子串长度的问题

举报
chenyu 发表于 2021/07/27 01:06:41 2021/07/27
【摘要】 题目: 已知一个字符串,只含有小写字母,求这个字符串的每个字符都不相同的最长子串的长度。 比如: abcd 结果是4 abcab 结果是3   思路: 用一个26个元素的整形数组表示一个字符串中是否含有某个字符。a~b分别映射到数组元素0~25。 用两个指针分别指向字符串的第一个和第二个元素,用第二个指针从左往右扫描字符串。每扫描一个字符,根据数组中...

题目:

已知一个字符串,只含有小写字母,求这个字符串的每个字符都不相同的最长子串的长度。

比如:

abcd 结果是4

abcab 结果是3

 

思路:

用一个26个元素的整形数组表示一个字符串中是否含有某个字符。a~b分别映射到数组元素0~25。

用两个指针分别指向字符串的第一个和第二个元素,用第二个指针从左往右扫描字符串。每扫描一个字符,根据数组中对应的值来判断这个字符是否已经出现。

如果没出现,则继续扫描,同时更新已知不相同子串的最大长度。

如果出现过,那么向右移动第一个指针,直到刚才重复的那个字符不再重复,然后继续上面的工作。

代码:


   
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. int lns(char *str){
  5. int length, max = 1, temp;
  6. int i, j;
  7. int a[26];
  8. length = strlen(str);
  9. memset(a, 0, sizeof(a));
  10. a[str[0] - 'a'] = 1;
  11. i = 0;
  12. j = 1;
  13. temp = 1;
  14. while((j < length) && (i < length - max)){
  15. // printf("j= %d, i=%d\n", j,i);
  16. // printf("result:%d", a[str[j] - 'a']);
  17. if(a[str[j] - 'a'] =&

文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/52818096

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。