LeetCode - 無重複字符的最長子串【Java | LeetCode中級算法】

給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。

示例 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;
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章