给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度

题目

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,”pwke” 是一个子序列,不是子串。

解法1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

```java
public int lengthOfLongestSubstring (String s) {
// write code here
char[] chars = s.toCharArray();
// 标记最大字串长度
int max = 0;
// 当前字串长度
int len = 0;
StringBuilder sb = new StringBuilder();
for (char c: chars){
// 判断当前字串是否已包含字符
if (!sb.toString().contains(c+"")){
// 没包含,直接拼接
sb.append(c);
len+=1;
} else {
// 已包含,从包含此字符的位置起,截取字符串到当前位置
String pre = sb.toString();
int index = pre.indexOf(c);
String substring = pre.substring(index + 1);
sb = new StringBuilder(substring);
// 将去掉到字符从新拼接到末尾
sb.append(c);
len = sb.toString().length();
}
// 赋值最大字串长度
if (len > max){
max = len;
}
}
return max;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

## 解法2:

```java
public int lengthOfLongestSubstring(String s) {
String subStr = "";
int maxLen = 0;
for (int i = 0; i < s.length(); i++) {
String s1 = s.charAt(i) + "";
if (subStr.contains(s1)) {
subStr = subStr.substring(subStr.indexOf(s1) + 1) + s1;
} else {
subStr += s1;
System.out.println(subStr);
maxLen = (subStr.length() > maxLen) ? subStr.length() : maxLen;
}
}
return maxLen;
}

解法类似