這里寫自定義目錄標題
- 題目來源:LeetCode
給定一個字串,請找出其中不含有重復字符的 最長子串 的長度,
示例 1:
輸入: “abcabcbb”
輸出: 3
解釋: 因為無重復字符的最長子串是 “abc”,所以其長度為 3,
示例 2:
輸入: “bbbbb”
輸出: 1
解釋: 因為無重復字符的最長子串是 “b”,所以其長度為 1,
示例 3:
輸入: “pwwkew”
輸出: 3
解釋: 因為無重復字符的最長子串是 “wke”,所以其長度為 3,
請注意,你的答案必須是 子串 的長度,“pwke” 是一個子序列,不是子串,
-
解題思路:
1.雙指標,start指標記錄子串的開始,end指標記錄子串的結尾,
2.end指標遍歷整個字串,將字串和下標放在HashMap中,在遍歷程序中記錄并更新 子串的長度,
3.end指標遍歷的時候,如果end指標指向的地址的值在HashMap中已經存過了,則改變start的值,使得start指向和end指標指向的字符相同的字符的下一位,記錄并更新子串的長度, -
代碼實作:
class Solution {
public int lengthOfLongestSubstring(String s) {
HashMap<Character, Integer> map = new HashMap<>();
int maxLen = 0;
int n = s.length();
for (int start = 0, end = 0; end < n; end++) {
if (map.containsKey(s.charAt(end))) {
start = Math.max(start, map.get(s.charAt(end)) + 1);
}
map.put(s.charAt(end), end);
maxLen = Math.max(maxLen, end - start +1);
}
return maxLen;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/16775.html
標籤:java
