题目链接
题目描述
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
题解 1
class Solution {
public int lengthOfLongestSubstring(String s) {
char[] chars = s.toCharArray();
int max = 0;
if (chars.length == 0) {
return 0;
} else if (chars.length == 1) {
return 1;
}
//重复的坐标
int len = 0;
// 外层for循环 用来计算总长
int j ;
//内层for循环 用来计算总长
int k;
for (j=0; j <chars.length ; j++) {
for (k = len; k<j ; k++) {
if (chars[j] == chars[k]) {
len = k+1 ;
break;
}
}
max = max < j - len + 1? j - len + 1: max;
}
return max;
}
}
题解 2
class Solution {
public int lengthOfLongestSubstring(String s) {
int len = s.length();
if (len == 0 || len == 1) {
return len;
}
List<Character> list;
int n = 0;
for (int i = 0; i < len; i++) {
list = new ArrayList<>();
for (int j = i; j < len; j++) {
if (!list.contains(s.charAt(j))) {
list.add(s.charAt(j));
n = n > j - i + 1? n : j - i + 1;
} else {
break;
}
}
}
return n;
}
}
手记
一道值得品味的题。同样是遍历,但是 题解 1 要比 题解 2快上不少。双层for 循环的部分,值得用心分析。
猴急
做题不要像这个小标题
以上