Leetcode解題筆記(4)

之前都是看到哪道就寫哪道,沒啥邏輯。這次主要是關於String的。

345. Reverse Vowels of a String

Write a function that takes a string as input and reverse only the vowels of a string.

Example 1:
Given s = "hello", return "holle".

Example 2:
Given s = "leetcode", return "leotcede".

Note:
The vowels does not include the letter "y".

大意也是反轉字符串,不同的是,遇到元音字母才調換。

思路:定義一個包括所有元音字母(大小寫)的數組,定義low high兩個指針,若low high對應的均爲元音字母,交換;否則,指針移動。

/**
 * @param {string} s
 * @return {string}
 */
var reverseVowels = function(s) {
    var set = ["a","e","i","o","u","A","E","I","O","U"];
    s = s.split("");
    var low = 0, high = s.length - 1,tem;
    while(low < high){
        if(set.indexOf(s[low]) == -1){
            low++;
        }
        else if(set.indexOf(s[high]) == -1){
            high--;
        }
        else if((set.indexOf(s[low]) != -1) && (set.indexOf(s[high]) != -1)){
            tem = s[low];
            s[low] = s[high];
            s[high] = tem;
            low++;
            high--;
        }
    }
    
    return s.join("").toString();
};

125. Valid Palindrome

迴文字符串。

錯了兩次wrong answer:

一次是因爲沒有忽略大小寫

一次是“a.”也是迴文字符串(啊其實我到現在也不理解??)可能是因爲只關注數字字母?

然後我就想到正則裏的 /W

之後的判斷有兩種方法了:

一種是設置兩個指針low high

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
    s = s.replace(/\W/g, '').toLowerCase().split("");
    var low = 0, high = s.length - 1;
    while(low <= high){
        if(s[low] != s[high]){
            return false;
        }
        low++;
        high--;
    }
    
    return true;
};

另一種是用到之前反轉的的那題的   判斷  string 和 reverse string

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
    s = s.replace(/\W/g, '').toLowerCase().split("").join("").toString();
    var sReverse = s.split("").reverse().join("").toString();
    return s === sReverse;
};

434. Number of Segments in a String

題目大意就是數一個字符串裏有多少個單詞(我一開始理解成數有多少個空格。。)我的天

思路還是簡單粗暴,遍歷字符串,當它是空格且它前一個不是空格的時候,計數器加一

/**
 * @param {string} s
 * @return {number}
 */
var countSegments = function(s) {
    var count = 0;
    if(!s){
        return 0;
    }else{
        for(var i=0;i<s.length;i++){
            if(s.charAt(i)!=' ' && (i===0 || s.charAt(i-1)==' ')){
                ++count;
            }
        }
    }
    
    return count;
};

還有一點想法

記得數組裏有filter()方法 或者再配合正則?   有機會試試!


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