鱼C论坛

 找回密码
 立即注册
查看: 1076|回复: 4

无重复字符的最长子串

[复制链接]
发表于 2021-12-2 13:07:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 三刀流.索隆 于 2021-12-2 13:11 编辑

leetcode的题目,不知道哪里有问题,抱错也看不懂



  1. int lengthOfLongestSubstring(char * s){
  2.         int i = 0,j = 0,count = 0,temp = 0;
  3.        
  4.         for (i = 0;s[i] != '\0';++i)
  5.         {
  6.                 for (j = i + 1;s[j] != s[i];++j)
  7.                         temp++;
  8.                
  9.                 count = temp > count ? temp:count;
  10.         }
  11.        
  12.         return count;
  13. }
复制代码


链接放不起,就直接打出来了:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-2 15:32:54 | 显示全部楼层
本帖最后由 jackz007 于 2021-12-5 14:44 编辑
  1. #include <stdio.h>

  2. int foo(char s[])
  3. {
  4.         int a , b , c , d[50][2] , i , j , k                                            ;
  5.         for(i = k = 0 ; i < 50 ; i ++) for(j = 0 ; j < 2 ; j ++) d[i][j] = 0            ;
  6.         if(s[0]) {
  7.                 for(c = 0 , i = 0 ; s[i] ; i ++) {
  8.                         for(j = i + 1 ; s[j] && s[j] != s[i] ; j ++)                    ;
  9.                         for(a = i ; a < j - 1 ;) {
  10.                                 for(b = a + 1 ; b < j && s[b] != s[a] ; b ++)           ;
  11.                                 if(b < j) break                                         ;
  12.                                 else a ++                                               ;
  13.                         }
  14.                         if(a == j - 1) {
  15.                                 d[c][0] = i                                             ;
  16.                                 d[c][1] = j - i                                         ;
  17.                                 c ++                                                    ;
  18.                                 i = j - 1                                               ;
  19.                         }
  20.                 }
  21.                 for(k = 0 , i = 1 ; i < c ; i ++) if(d[i][1] > d[k][1]) k = i           ;
  22. /*
  23.                 for(i = 0 ; i < c ; i ++) {
  24.                         if(d[i][1] == d[k][1]) {
  25.                                 for(j = 0 ; j < d[i][1] ; j ++) putchar(s[d[i][0] + j]) ;
  26.                                 putchar('\n')                                           ;
  27.                         }
  28.                 }
  29. */
  30.         }
  31.         return d[k][1]                                                                  ;
  32. }

  33. int main(void)
  34. {
  35.         char s[256]                                                                     ;
  36.         gets(s)                                                                         ;
  37.         printf("%d\n" , foo(s))                                                         ;
  38. }
复制代码

        编译、运行实况
  1. D:\0002.Exercise\C>g++ -o x x.c

  2. D:\0002.Exercise\C>x
  3. bbbbbb
  4. 1

  5. D:\0002.Exercise\C>x
  6. pwwkew
  7. 3

  8. D:\0002.Exercise\C>x
  9. abcabcbb
  10. 3

  11. D:\0002.Exercise\C>
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 13:16:32 | 显示全部楼层
  1. bool ifOk(int i,int j,char *s);

  2. int lengthOfLongestSubstring(char * s){
  3.     if (NULL == s)
  4.         return 0;

  5.         int i = 0,j = 0,count = 0,temp = 1;
  6.         
  7.         for (i = 0;s[i] != '\0';++i)
  8.         {
  9.             for (j = i+1;s[j] != '\0' && s[j] != s[i];++j)
  10.             {
  11.                 if (ifOk(i,j,s) == 1)
  12.                     temp++;
  13.             }
  14.             count = temp > count ? temp:count;
  15.             temp = 1;
  16.         }
  17.         //for ()
  18.       
  19.         return count;
  20. }

  21. bool ifOk(int i,int j,char *s)
  22. {
  23.     int a = i,b = i+1;
  24.     if (j-i < 2)
  25.         return 1;
  26.     else
  27.     {
  28.         for (;b <= j;++b)
  29.         {
  30.             for (a = i;a != b;++a)
  31.             {
  32.                 if (s[a] != s[b])
  33.                     continue;
  34.                 else
  35.                 {
  36.                     return 0;
  37.                     break;
  38.                 }
  39.             }
  40.         }
  41.     }

  42.     return 1;
  43. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 13:21:59 | 显示全部楼层

如果输入s为""的话,你的代码有bug
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 14:45:53 | 显示全部楼层
三刀流.索隆 发表于 2021-12-5 13:21
如果输入s为""的话,你的代码有bug

         你提醒的很对,我的代码确实忽略了空串,2 楼的代码已经修正,欢迎再测。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 16:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表