给定一个字符串,找出不含有重复字符的最长子串的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 无重复字符的最长子串是 "abc",其
长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 无重复字符的最长子串是 "b"
,其长度为 1。
示例 3:
输入: "pwwkew" 输出: 3 解释: 无重复字符的最长子串是"wke"
,其长度为 3。 请注意,答案必须是一个子串,"pwke"
是一个子序列 而不是子串。
解题思路
建立一个List或者Hashset也行,用来存储这个子串.用一个变量(我这里用temp)来存储子串的长度,然后用for循环遍历整个字符串,如果List当中有当前遍历到的字符,则将List当中的这个字符的位置找出来,将这个位置和这个位置之前的字符去除,然后将当前遍历的字符加入进去,如果List的长度大于temp,将List的长度赋值给temp,如果当中没有这个字符,则添加到List里面去,同样更新temp的值
值得注意:List中的remove方法要从大到小删除,否则容易报越界异常
代码:
class Solution { public int lengthOfLongestSubstring(String s) { if(s.length()==0) return 0; List<Character> list = new ArrayList<>(); int temp = 0; char it; int loc = 0; for(int i = 0;i < s.length();i++) { it = s.charAt(i); if(list.contains(it)) { loc = list.indexOf(it); for(int j = loc; j >= 0;j--) { list.remove(list.get(j)); } list.add(it); if(list.size()>temp) { temp = list.size(); } }else { list.add(it); if(list.size()>=temp) temp = list.size(); } } return temp; } }
原文地址:https://www.cnblogs.com/Yintianhao/p/9623239.html
时间: 2024-10-10 04:34:57