leetcode题解:无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
暴力求解
我们大脑一眼就能看到一个字符串中哪些字符是重复的,按照计算机的思路来分析,首先从首字符开始遍历,如果发现后面的字符不和首字符相同,那么把首字符和后面的字符作为一个整体,再依次和后面进行判断,如果发现下一个字符是在首字符串里面包含的,那么把首字符串作为单独的一段,放到set集合里面,再从下一个字符重复如上的操作,最后比较出set集合里面最长的字符串,就是答案,代码如下:
public int lengthOfLongestSubstring(String s) {
int len = s.length();
HashSet<String> set = new HashSet<>();
int res = 1;
if (len <= 1) {
res = len ;
}
for (int i = 0; i < len; i++) {
String ch = s.charAt(i) + "";
for (int j = i+1; j < len; j++) {
if (!ch.contains(s.charAt(j)+"") ){
ch += s.charAt(j);
if(set.contains(ch)){
res = Math.max(ch.