zoukankan      html  css  js  c++  java
  • --算法恩仇录--实战篇--力扣(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%的用户
    (时间比我慢一丢丢,哈哈~不过综合空间消耗来看,比我好很多~得继续学习呀~)
    更多方法尝试中~~
    离大侠再近一步!
  • 相关阅读:
    二选一的痛定思痛
    .net 代码混淆原理性实践
    什么是 RSS?
    ViewEngine 深入解析与应用实例 {转}
    C#访问修饰符及各种元素的访问修饰符的默认值
    [转]基于VS.NET的自定项目模板研究
    刘若鹏
    System.Configuration 和Connection
    Page.Master.FindControl?还是Page.FindControl?
    模板页中的链接
  • 原文地址:https://www.cnblogs.com/Samo-Li/p/13588276.html
Copyright © 2011-2022 走看看