--算法恩仇录--实战篇--力扣(LeetCode)--557-反转字符串中的单词--

1.这是道简单题,之所以记录的原因是其使用链式编程完成字符串的反转。

代码如下:

/**
 * @param {string} s
 * @return {string}
 */
var reverseWords = function(s) {
    let str='', tmp='';
    for(let i = 0; i < s.length;i++){
        if(s[i] === ' '){
            str += tmp.split('').reverse().join('');
            //console.log('TEMP: ' + tmp.split('').reverse().join(''));
            tmp = '';
            if(i !==s.length-1){
                str += ' ';
            }
        } else {
            tmp += s[i];
            if(i ===s.length-1){
                str += tmp.split('').reverse().join('');
            }
        }
    }
    return str;
};
const str = "Let's take LeetCode contest"
console.log(reverseWords(str));

使用以上JavaScript代码结果如下~

执行用时:144 ms, 在所有 JavaScript 提交中击败了6.02%的用户
内存消耗:45.2 MB, 在所有 JavaScript 提交中击败了14.70%的用户
 
2.不使用链式编程,如下~
/**
 * @param {string} s
 * @return {string}
 */
var getAnotherStr = function(s){
    let str='';
    for(let i = s.length-1;i>=0;i--){
        str += s[i];
    }
    return str;
}

var reverseWords = function(s) {
    let str='', tmp='';
    for(let i = 0; i < s.length;i++){
        if(s[i] === ' '){
            str += getAnotherStr(tmp);
            //console.log('TEMP: ' + tmp.split('').reverse().join(''));
            tmp = '';
            if(i !==s.length-1){
                str += ' ';
            }
        } else {
            tmp += s[i];
            if(i ===s.length-1){
                str += getAnotherStr(tmp);
            }
        }
    }
    return str;
};

以上JavaScript代码结果如下:

执行用时:112 ms, 在所有 JavaScript 提交中击败了14.90%的用户
内存消耗:43.9 MB, 在所有 JavaScript 提交中击败了98.92%的用户
 
3.以上两种办法感觉时间开销都比较大,都有重复遍历的时间损耗。能不能遍历一次就能实现反转?
于是有了以下代码:
/**
 * @param {string} s
 * @return {string}
 */

var reverseWords = function(s) {
    let str='', tmp='';
    for(let i = s.length-1; i >=0;i--){
        if(s[i] !== ' '){
            tmp += s[i];
            if(i ===0){
                str = tmp + str;
            }
        } else {
            str = ' '+ tmp +str;
            tmp = '';
        }    
    }
    return str;
};

结果:

执行用时:88 ms, 在所有 JavaScript 提交中击败了69.34%的用户
内存消耗:44.7 MB, 在所有 JavaScript 提交中击败了33.69%的用户
 
4.emmmm,在网上查找了其他大佬的写法,发现自己吃亏在正则表达式上【/吐血】,看来是时候恶补一波正则了!
代码如下:
/**
 * @param {string} s
 * @return {string}
 */

var reverseWords = function(s) {
    var result = s.split(/\s/g).map(item=>{
        return item.split('').reverse().join('')
    }).join(' ');
    return result
};
const str = "Let's take LeetCode contest"
console.log(reverseWords(str));

结果为:

执行用时:92 ms, 在所有 JavaScript 提交中击败了58.70%的用户
内存消耗:44.4 MB, 在所有 JavaScript 提交中击败了76.35%的用户
(时间比我慢一丢丢,哈哈~不过综合空间消耗来看,比我好很多~得继续学习呀~)
更多方法尝试中~~
posted @ 2020-08-31 10:33  小虾米在code江湖  阅读(161)  评论(0编辑  收藏  举报