博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最长不重复子串
阅读量:4647 次
发布时间:2019-06-09

本文共 1956 字,大约阅读时间需要 6 分钟。

问题描述:给定一个字符串,找出这个字符串中最长的不重复串。

比如:对于字符串"abcba",那么返回的结果应该是"abc"或者"cba"(返回一个即可);对于字符串"acbba",返回的应是"acb"

思路:利用HaspMap,map的key存储的是字符,value存储的是字符当前的位置,利用containsKey()方法检测是否有重复

1、如果当前字符出现过并且index大于该字符上一次出现的index,那么将map中该字符对应的value值替换,上一次出现的字符的下一个字符到当前字符变为目前新的子串,(此时子串不一定是最大长度的子串,而是程序运行过程中当前不重复的子串)
2、如果目前新子串的长度(当前字符的index与startIndex(目前新子串的初始index)的差值 + 1)大于maxLen(最长不重复子串长度),更新maxLen,如果要输出这个不重复子串,需要记录startIndex
3、记录当前字符的index
以"abcba"为例:
1、map.put('a',0),初始startIndex为0,maxLen为1,map.put('b',1),startIndex为0,maxLen为2,map.put('c',2),startIndex为0,maxLen为3,此时子串为"abc",map.put('b',3),检测到有重复,则目前新的子串变为‘cb’,将map中字符'b'的index替换为3,maxLen为2,startIndex变为2
2、目前新的子串为'cb',index为3,startIndex为2,长度为2,小于最大长度,不更新maxLen
扫描完以后,根据oriStartIndex(maxLen改变时记录的startIndex)和maxLen来得到最长不重复子串

具体代码如下:

import java.util.HashMap;public class findLongestSubString {    public static void main(String[] args) {        String str = "120135435";        StringBuilder maxSubString = new StringBuilder("");          char[] strCharArr = str.toCharArray();          HashMap
charsIndex = new HashMap
(); int startIndex = 0, oriStartIndex = startIndex, maxLen = 0; for(int index = 0; index < strCharArr.length; index++) { if(charsIndex.containsKey(strCharArr[index])) { int oriIndex = charsIndex.get(strCharArr[index]); if(oriIndex >= startIndex){ startIndex = oriIndex + 1; } } if(index - startIndex + 1 > maxLen) { maxLen = index - startIndex + 1; oriStartIndex = startIndex; } charsIndex.put(strCharArr[index], index); } for(int index = oriStartIndex; index < oriStartIndex + maxLen; index++) { maxSubString.append(strCharArr[index]); } System.out.println(maxSubString.toString());}

转载于:https://www.cnblogs.com/gcoder/p/7495970.html

你可能感兴趣的文章
SurfaceView+MediaPlay的bug们
查看>>
网络表示学习总结
查看>>
完成评论功能
查看>>
far和near
查看>>
Python爬虫实战四之抓取淘宝MM照片
查看>>
2015 Multi-University Training Contest 1
查看>>
C#判断一个字符串是否是数字或者含有某个数字
查看>>
SVN使用指南
查看>>
【转载】掌 握 3 C ‧ 迎 接 亮 丽 职 涯
查看>>
爬取网站附件
查看>>
java基础图形界面和IO系统
查看>>
javascript学习笔记
查看>>
hdu 3996
查看>>
python第三十九课——面向对象(二)之初始化属性
查看>>
python学习笔记之函数装饰器
查看>>
FEM计算2D瞬态热传导方程
查看>>
四年时光,匆匆而过
查看>>
【php】【psr】psr1 基础编码规范
查看>>
WAF SSI
查看>>
LDAP & it's implementation
查看>>