之前都是看到哪道就寫哪道,沒啥邏輯。這次主要是關於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()方法 或者再配合正則? 有機會試試!