3. Longest Substring Without Repeating Characters(計算不含重複字符的最長子串的長度)

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

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring"pwke" is a subsequence and not a substring.


題目大意:給定一個字符串,計算出不含重複字符的最長子串的長度。例如"pwwkew"滿足條件的最長子串是"wke"而不是"pwke",因爲要是連續的子串,而不是子序列。


解題思路:maxLen代表當前已經找到的滿足條件的最長子串的長度,兩個int指針start和end,s[start]至s[end-1]表示當前已經遍歷到的不含重複字符的子串,s[end]表示當前正在遍歷的字符:


                  如果s[end]包含在s[start]至s[end-1]的子串中,那麼找到與s[end]重複的那個字符的位置,將start移動到這個位置+1的位置,並將end++然後繼續遍歷;


                  如果不包含的話,那麼這時候將end-start+1與maxLen比較,如果大於maxLen,那麼替換maxLen。然後end++並繼續遍歷。


                  直到end的值超出字符串的長度範圍。


解題代碼:(53ms,beats 70.53%)

class Solution {
    public int lengthOfLongestSubstring(String s) {
        if (s.length() < 2) {
			return s.length();
		}
		int maxLen = 1, start = 0, end = 1, len = 1;
		String curStr;
		while (end < s.length()) {
			curStr = s.substring(start, end);
			if (curStr.contains(String.valueOf(s.charAt(end)))) {
				start = s.indexOf(s.charAt(end), start) + 1;
				end++;
				continue;
			}
			len = end - start + 1;
			if (len > maxLen) {
				maxLen = len;
			}
			end++;
		}

		return maxLen;
    }
}



發佈了251 篇原創文章 · 獲贊 274 · 訪問量 73萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章