[LeetCode#3][C]Longest Substring Without Repeating Characters
来源:互联网 发布:软件外包团队管理 编辑:程序博客网 时间:2024/05/03 01:52
作者:faaronzheng 转载请注明出处!
题目如下:
思路:
首先明确要求中的substring和subsequence的区别。实现的方法也有许多种,可以用三重循环(第一重遍历主串,第二重计算当前的最长子串,第三重保证当前子串中没有重复项)。但是这样时间复杂度太大,所以放弃(我没有用LeetCode提交,不知道会不会超时~)。我采用了一种间接的方法。虽然还有两重循环,但是勉强可以接受。
关键就在于使用一个数组减少三重循环中的最后一重(hash更好,这里用一个数组模拟hash的思想)。由于char和int存在相互转化的关系,我们可以用这个数组用来指示当前的字母或符号是否在当前的最长子串中出现过。
代码:
int lengthOfLongestSubstring(char* s) { char *t=s; //子串 int max=0,i=0,j; //i和j分别记录当前子串的开始下标和结束下标 while(*(s+i)!='\0') { int a[128]={0}; //记录当前的字母或符号是否在当前的最长子串中出现过。 j=i+1; while(*(t+j)!='\0') { if(a[*(t+j)]==0&&*(s+i)!=*(t+j)) { a[*(t+j)]=1; j++; max=j-i>max?j-i:max; } else { max=j-i>max?j-i:max; i++; break; } } max=j-i>max?j-i:max; if(*(t+j)=='\0') //子串达到最大长度 return max; } return max;}
结果:
进阶:
在上面的基础上,我们可以进一步将循环降至一层。方法就是在所有循坏外定义一个存放最长子串的结构,再循环的时候动态修改当前的最长子串就可以了。最容易想到的当然还是用hash保存当前的最长子串。但是c语言还要自己实现。所以放弃,还是使用之前的数组模拟hash结构。只要将数组定义到所有循环外,在对程序做些小的修改就可以了~从结果可以看出,提升还是不少的~
代码:
int lengthOfLongestSubstring(char* s) { int max=0,i=0,j=0; int a[128]={0}; //记录当前的最长子串。 while(*(s+i)!='\0'&&*(s+j)!='\0') { if(i==j||a[*(s+j)]==0&&*(s+i)!=*(s+j)) { a[*(s+j)]=1; j++; max=j-i>max?j-i:max; } else { max=j-i>max?j-i:max; a[*(s+i)]=0; i++; } } return max;}
结果:
0 0
- [LeetCode]3 Longest Substring Without Repeating Characters (C++,Python实现)
- [LeetCode#3][C]Longest Substring Without Repeating Characters
- LeetCode 3 - Longest Substring Without Repeating Characters
- LeetCode 3: Longest Substring Without Repeating Characters
- leetcode-3:Longest Substring Without Repeating Characters
- LeetCode(3) Longest Substring Without Repeating Characters
- leetcode 3LONGEST SUBSTRING WITHOUT REPEATING CHARACTERS
- Leetcode【3】:Longest Substring Without Repeating Characters
- [leetcode 3] Longest Substring Without Repeating Characters
- [Leetcode] 3 - Longest Substring Without Repeating Characters
- LeetCode 3:《Longest Substring Without Repeating Characters》
- [leetcode 3] Longest Substring Without Repeating Characters
- [leetcode] 3 Longest Substring Without Repeating Characters
- [Leetcode]3Longest Substring Without Repeating Characters
- leetcode 3 Longest Substring Without Repeating Characters
- LeetCode #3 Longest Substring Without Repeating Characters
- leetcode-3 Longest Substring Without Repeating Characters
- LeetCode 3 Longest Substring Without Repeating Characters
- bzoj 1101: [POI2007]Zap
- HTML中鼠标滚轮事件onmousewheel
- django框架从零开始_001_安装
- Linux 下Boa + cgic Web服务器 +mjgp----fwqlzz love is for ever
- 电脑播放视频切断重新播放声音变大
- [LeetCode#3][C]Longest Substring Without Repeating Characters
- C++中创建临时对象的情况
- SQL语句命令
- leetcode_096 Unique Binary Search Trees
- 完全卸载mysql数据库
- java对redis的操作
- 通过案例对spark streaming透彻理解三板斧之一
- Precision,Recall和F1
- 【裸奔吧linux】netstat: 显示网络连接,路由表,接口统计信息,多播成员