給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。
示例 1:
輸入: "abcabcbb" 輸出: 3 解釋: 因爲無重複字符的最長子串是"abc",所以其
長度爲 3。示例 2:
輸入: "bbbbb" 輸出: 1 解釋: 因爲無重複字符的最長子串是"b"
,所以其長度爲 1。示例 3:
輸入: "pwwkew" 輸出: 3 解釋: 因爲無重複字符的最長子串是"wke"
,所以其長度爲 3。 請注意,你的答案必須是 子串 的長度,"pwke"
是一個子序列,不是子串。
class Solution {
public int lengthOfLongestSubstring(String s) {
int maxLen = 0;
// 字符串長度大於0時,默認爲最小子串長度爲1
if (s.length() > 0) {
maxLen = 1;
}
// 將字符串轉爲char數組,方便操作
char[] strs = s.toCharArray();
// 定義兩個下標,去循環串
int fast = 0;
int slow = 0;
// 終止條件爲當最前面的下標觸及串尾時,代表字符串已經遍歷完畢
while (fast < strs.length - 1) {
fast++;
for (int i = slow; i < fast; i++) {
if (strs[i] == strs[fast]) {
slow = i + 1;
break;
}
}
if (maxLen < fast - slow + 1) {
maxLen = fast - slow + 1;
}
/* 註釋內的內容是爲了打印子串用的
* for (int j = slow; j < fast; j++) { String ret = String.copyValueOf(strs,
* slow, fast - slow + 1); System.out.println(ret + "\t" + ret.length()); }
*/
}
return maxLen;
}
}