Leetcode解题笔记(4)

来源:互联网 发布:龙卷风收音机软件 编辑:程序博客网 时间:2024/06/03 19:51

之前都是看到哪道就写哪道,没啥逻辑。这次主要是关于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()方法 或者再配合正则?   有机会试试!


0 0