用java实现无重复字符的最长子串
题目描述:
解题思路:
在读题的时候我们需要抓住两个关键词,分别是“**无重复”**和“最长字串”。通过这两个关键词我们分析题目可以发现一个无重复字符的最长字串一定位于两个重复字符之间,例如:字符串"abctacabu",这个字符串中介于重复字符之间的字符字串有"abct",“cabu”,“bcta”,“tac”,只要我们一一列举所有介于重复字符之间的字符串,再从中挑出最长的那段就可以解决这个问题了。对于如何判断一个字符是否为重复字符可以使用一个HashMap集合来维护出现过的字符序列,当该字符为第一次出现时存入集合中。
代码实现
class Solution {
public int lengthOfLongestSubstring(String s) {
int extent = 0;//存储无重复字符的最长字串的长度
int temp = 0;//中间变量,用于存储介于重复字符之间的字符字串长度
//使用HashMap存储出现过的字符
Map<Character, Integer> list = new HashMap<Character, Integer>();
//将字符串转化为字符数组
char[] a = s.toCharArray();
//遍历字符数组,找出介于重复字符之间的字符字串长度
for(int i = 0;i<a.length;i++){
//判断该字符是否出现过
if(list.get(a[i])==null){
//该字符未出现时改子串长度加一
temp++;
//将该字符存入集合中进行维护
list.put(a[i],i);
//当temp超过extent时将temp赋值给extent
if(temp > extent){
extent = temp;
}
}else{
/*当该字符为重复字符时,将i回位到该字符出现的
第一次出现的下表加一处,此时意味着一条位于重复
字符之间的子串查找完毕*/
i = list.get(a[i]);
//清空集合
list.clear();
//temp归0
temp = 0;
}
}
return extent;
}
}
总结:
这篇文章是我的博文处女作,有很多地方写不是很严谨,还请各位大佬勿喷。如文章中有不足的地方还请大家指出。写博文的目跟广大博友的目的一样,旨在于分享自己的所见所闻,与广大网友交流技术、分享技术。同时也是为了记录自己的学习历程,希望在不久的将来能成为一名优秀的程序员,为大家带来好的文章。在这里线先立个flag,前期能做到周更!!!