Leetcode 3 Longest Substring Without Repeating Characters
阿新 • • 發佈:2018-12-11
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.
想了很久沒想出來,借鑑了一點題解:
本題類似於最長公共子序列的問題,動規的思想
class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(), ans = 0; Map<Character,Integer> map = new HashMap<>(); for(int i = 0 ,j = 0;j < n ;j++){ if(map.containsKey(s.charAt(j))){ i = Math.max(map.get(s.charAt(j)),i); } ans = Math.max(ans,j - i + 1); map.put(s.charAt(j),j+1); } return ans; } }
另一個解:
public class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(), ans = 0; int[] index = new int[128]; // current index of character // try to extend the range [i, j] for (int j = 0, i = 0; j < n; j++) { i = Math.max(index[s.charAt(j)], i); ans = Math.max(ans, j - i + 1); index[s.charAt(j)] = j + 1; } return ans; } }
int [26]
用於字母 ‘a’ - ‘z’或 ‘A’ - ‘Z’int [128]
用於ASCII碼int [256]
用於擴充套件ASCII碼
時間複雜度為:O(n)
空間複雜度為:O(n)