本题要求传入一个字符串,求出不重复最长子串的长度,但 我在求最大长度的基础上,增加了输出最长子串 示例 1: 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s = “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 思路: 通过hashmap的key值唯一来判断是否出现重复字符,当未出现重复字符,会判断是否为最大长度,如果是则记录最长子串的开始下标,当出现重复子串,将记录长度归零,并且清空字符串,再回溯到第一个重复字符那里继续循环判断。
public static int lengthOfLongestSubstring(String s) {
//将字符串转为字符数组
char[] c = s.toCharArray();
//用于记录字符串,key存字符,value存下标
HashMap map = new HashMap();
int max=0;// 记录最大长度
int len =0;// 判断用的长度
int startIndex = 0;//记录最长子串的下标
//对字符数组进行遍历,采用滑动窗口的方法
for (int end = 0,start=0; end max){
max = len;
startIndex=start;
}
}
}
//截取最长子串并输出(左闭右开)
System.out.println(s.substring(startIndex,startIndex+max));
return max;
}
只记录长度的版本(效率比上面高)
public static int lengthOfLongestSubstring(String s) {
char[] c = s.toCharArray();
HashMap map = new HashMap();
int max=0;
for (int end = 0,start=0; end |