字符串算法——最长子串(无重复元素)
来源:互联网 发布:nginx 访问权限 编辑:程序博客网 时间:2024/05/19 22:52
问题:给定一个字符串,找出最长的无重复元素的子串
例如:
“bbbbbb”的子串为”b”
“abcabccd”的子串为”abc”
两种思路,一种是从头开始依次比较,例如:
字符串为:”abcabccd”,从第一个字符元素”a”开始,直到”abca”发现出现重复元素,则从第二个字符元素”b”开始重复上述操作,比较得到的长度,
class Solution { public int lengthOfLongestSubstring(String s) { int len =s.length();//字符串长度 if(len==0)return 0; int maxlen = 1;//存储子串长度 int i=0; while(true){ boolean flag[] = new boolean[256];//标记是否出现重复元素 int point = i+1; flag [s.charAt(i)]= true; while(point<len && !flag[s.charAt(point)]){//判断该字符元素是否出现过 flag[s.charAt(point)]=true; if(maxlen<point-i+1){//判断是否找到更大的子串长度 maxlen = point-i+1; } point++; } i++; //判断是否跳出循环 if(i>=len){ break; } } return maxlen; }}
另一种思路是跳跃式比较,例如:
字符串为”abcbaccd”,一开始从第一个字符元素开始比较,到”abcb”发现出现重复字符元素”b”,这时候不从第二个字符元素”b”开始比较,因为比较后发现不会比前一个子串更长,这里从出现重复字符元素前一个该字符元素后一位开始比较,即从第三个字符元素”c”开始,降低时间复杂度。
class Solution { public int lengthOfLongestSubstring(String s) { int length = s.length();//字符串长度 if(length ==0){ return 0; } int start = 0; int i = start;//每次比较的起始位置 int max = 1;//存储最长子串长度 while(i<length){ boolean flag[] = new boolean[256];//标记是否出现重复字符元素 for(;i<length;i++){ if(!flag[s.charAt(i)]){ flag[s.charAt(i)] = true; if(max<i-start+1){ max = i-start+1; } }else{ start = s.indexOf(s.charAt(i),start)+1;//下次比较的起始点 i=start; break; } } } return max; }}
阅读全文
0 0
- 字符串算法——最长子串(无重复元素)
- 字符串——最长无重复子串
- 最长无重复子字符串
- 华为机试——求字符串中最长无重复子串
- 【算法题】查找字符串中无重复最长子串的长度
- 最长无重复子串
- 最长无重复子串
- 最长无重复子串
- 求字符串中最长无重复字符的子串
- 求字符串中最长无重复字符的子串
- 查找字符串中最长无重复字符的子串
- 求字符串中最长无重复字符的子串
- 求字符串中最长无重复字符的子串
- 求字符串的最长无重复字符子串(C++)
- 求字符串中最长无重复字符的子串
- 字符串中最长无重复字符的子串
- 求字符串中最长无重复字符的子串
- 求字符串中最长无重复字符的子串
- Python实现文件前添加序号
- poj 1066 Treasure Hunt(判断线段相交)
- 深度学习进阶(六)--CNN卷积神经网络调试,错误历程总结
- HTML开发——成长笔记(以后学习心得都会整理出来分享给大家)
- 深入理解volatile关键字
- 字符串算法——最长子串(无重复元素)
- 编写程序数一下 1到 100 的所有整数中出现多少次数字9
- 平常用到的linux命令
- python添加tab补全功能
- 第二章数据类型
- 至最初的你!
- [实习心得]从百草园到三味书屋
- 数据结构-前中后序遍历的非递归实现
- 通过pip命令导出和导入Python环境安装包