leetcode第三题《无重复字符的最长子串》

qimi_and_softkitty 2018-08-22 11:32:59
函数在本机上跑没有问题,上传答案就显示超时,死循环了?

题目:
输入: "abcabcbb"
输出: 3
解释: 无重复字符的最长子串是 "abc",其长度为 3。
输入: "pwwkew"
输出: 3
解释: 无重复字符的最长子串是 "wke",其长度为 3。

函数:
int lengthOfLongestSubstring(char* s) {
int maxLen = 0;
int len = 0;
char *p = s; //当前位置
char *ps = s; //当前子串起始位置
char *pc = s; //循环比较

while('\0' != *p)
{
while(pc != p)
{
if(*pc == *p)
{
maxLen = maxLen > len?maxLen:len;
len = 0;
ps = ps++;
pc = ps;
p = ps;
break;
}
pc++;
}

p++;
len++;
pc = ps;
}
maxLen = maxLen > len?maxLen:len;
return maxLen;
}
...全文
435 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qimi_and_softkitty 2018-08-22
  • 打赏
  • 举报
回复
引用 1 楼 zhangchm2018 的回复:
int lengthOfLongestSubstring(char* s) { int maxLen = 0; int len = 0; char *p = s; //当前位置 char *ps = s; //当前子串起始位置 char *pc = s; //循环比较 while('\0' != *p) { while(pc != p) { if(*pc == *p) { maxLen = maxLen > len?maxLen:len; len = 0; ps = ps++; pc = ps; p = ps; break; } pc++; } p++; len++; pc = ps; } maxLen = maxLen > len?maxLen:len; return maxLen; } ① 标红出的逻辑不对,ps++就好,不然就变成: ps = ps; ps++; ② 当找到重复字符的时候,len不用清0,p也不用重置,因为剩余的字符串肯定不会重复。
多谢。已解决。
zhangchm2018 2018-08-22
  • 打赏
  • 举报
回复
int lengthOfLongestSubstring(char* s) {
int maxLen = 0;
int len = 0;
char *p = s; //当前位置
char *ps = s; //当前子串起始位置
char *pc = s; //循环比较

while('\0' != *p)
{
while(pc != p)
{
if(*pc == *p)
{
maxLen = maxLen > len?maxLen:len;
len = 0;
ps = ps++;
pc = ps;
p = ps;
break;
}
pc++;
}

p++;
len++;
pc = ps;
}
maxLen = maxLen > len?maxLen:len;
return maxLen;
}

标红出的逻辑不对,ps++就好,不然就变成:
ps = ps;
ps++;

当找到重复字符的时候,len不用清0,p也不用重置,因为剩余的字符串肯定不会重复。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧