1. 程式人生 > >LeetCode解題筆記 - 3. Longest Substring Without Repeating Characters

LeetCode解題筆記 - 3. Longest Substring Without Repeating Characters

返回 swe 字符串 opened 比較 obj 是把 character def

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.

給定一個字符串,找到最長的子串的長度沒有重復字符。

這題其實思路就是把字符串中的字符遍歷,記錄每個字符的位置,遇到相同的字符更新位置,然後比較長度。可是自己做的亂七八糟,多出很多沒用的東西。

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    var count = 0,//本來想用來記錄當前連續無重復字符數,但其實不需要,i-start+1就等於它
        obj = {},
        arr 
= s.split(‘‘), start = 0, length = 0, del = "",//本來想用來記錄,然後刪除重復字符之前的,沒用了的字符,但其實完全沒必要,只需要記錄歷史以前最長長度length和當前無重復字符開始位置start就可以 Substring = "";//審題不仔細,本來以為要返回子字符串的 for(var i=0;i<arr.length;i++){ //debugger; if(obj[arr[i]] === undefined){ }else{ start
= obj[arr[i]] + 1; } if(i-start+1 > length){ Substring = s.slice(start,i+1); } obj[arr[i]] = i; } return length; };

然後對比熱門答案,真是無地自容,解題方法沒想到都還算了,本質思路其實不差多少,卻多出來那麽多垃圾代碼。以後要註意審視自己寫的東西了

   public int lengthOfLongestSubstring(String s) {
        if (s.length()==0) return 0;
        HashMap<Character, Integer> map = new HashMap<Character, Integer>();
        int max=0;
        for (int i=0, j=0; i<s.length(); ++i){
            if (map.containsKey(s.charAt(i))){
                j = Math.max(j,map.get(s.charAt(i))+1);
            }
            map.put(s.charAt(i),i);
            max = Math.max(max,i-j+1);
        }
        return max;
    }
技術分享圖片
var lengthOfLongestSubstring = function(s) {
    var obj = {},
        arr = s.split(‘‘),
        start = 0,
        length = 0;
    for (var i = 0; i < arr.length; i++) {
        if (obj.hasOwnProperty(arr[i])) {
            start = obj[arr[i]] + 1;
        }
        obj[arr[i]] = i;
        length = Math.max(length, i - start + 1)
    }
    return length;
};
View Code

LeetCode解題筆記 - 3. Longest Substring Without Repeating Characters