LeetCode Note Java 00003:Longest Substring Without Repeating Characters

回傳字串中最長不重複字元子字串的長度。

題目

Longest Substring Without Repeating Characters Medium

Given a string s, find the length of the longest substring without repeating characters.

我的解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public int lengthOfLongestSubstring(String s) {
int n = s.length();
if (n < 2) {
return n;
}
int l = 0, r = l + 1, count = 1, res = 1; // 左邊界、右邊界、長度計數、答案
while (l < r && r < n) {
String subS = s.substring(l, r); // 截出無重複字元的子字串
if (!subS.contains("" + s.charAt(r))) { // 下個字元不在子字串中就增加計數
count++;
} else { // 子字串中包含下個字元,將左邊界移到該重複字元的下一位;將計數扣除重複字元在子字串中的索引
l += subS.indexOf(s.charAt(r)) + 1;
count -= subS.indexOf(s.charAt(r));
}
res = count > res ? count : res; // 計數超過答案就更新答案
r++; // 右邊界前進
}
return res;
}
}

寫到邏輯混亂,很多條件我自己都不清楚為什麼,尤其是移動邊界跟扣除計數的加一減一很不好想,我是重複嘗試才試出結果。