• 字符串算法 反转单词原理讲解


    题目:给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序
    输入: 'let's take leetcode contest'
    输出: 's'tel ekat edocteel tsetnoc'
    注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
    在这个题目解析中,大家可能会觉得这个注意事项没什么用,其实有一定意义的。
    解题思路:
    1、搞清楚题意,这道题题意比较明白。同时仍保留空格和单词的初始顺序,也就是单词的顺序不能改变
    2、我们要做的就是,如何保存单词的顺序不变,还要保证单词的反转
    3、先把句子分隔开,分隔开之后把字符串变成一个数组。这样的话,数组的先后顺序就是单词的先后顺序
    4、再把数组的每个单词进行反转
    代码
    export default (str) => {
        // 字符串按空格进行分隔,保存数组,数组的元素的险乎顺序就是单词的顺序
        let arr = str.split(' ')
        // 对数组进行遍历,然后每个元素进行反转
        let result = arr.map(item => {
          return item.split('').reverse().join('')
        })
        return result.join(' ')
    }

    最后会经常忘记空格join。这是注意事项的意义,能否完整周全的实现题目

    但是这样写看上去很清晰,实际上写的有点冗余,还不够优雅。这样会减分的,怎么才会更加优雅一些呢
    代码
    export default (str) => {
        // 字符串按空格进行分隔,保存数组,数组的元素的险乎顺序就是单词的顺序
        // 对数组进行遍历,然后每个元素进行反转
        return str.split(' ').map(item => {
          return item.split('').reverse().join('')
        }).join(' ')
    }

    其实思路是一样的,只是代码的写法上不一样。优雅的地方是第一种多出了两个变量,第二种没有申明多余多变量

    那么除了这种方法,可否还有别的方式实现
    1、分隔字符串用正则, s 表示正则
    export default (str) => {
        // 字符串按空格进行分隔,保存数组,数组的元素的险乎顺序就是单词的顺序
        // 对数组进行遍历,然后每个元素进行反转
        return str.split(/s/g).map(item => {
          return item.split('').reverse().join('')
        }).join(' ')
    }
    2、不用split方法
    export default (str) => {
        // 字符串按空格进行分隔,保存数组,数组的元素的险乎顺序就是单词的顺序
        // 对数组进行遍历,然后每个元素进行反转
        return str.match(/[w']+/g).map(item => {
          return item.split('').reverse().join('')
        }).join(' ')
    }
    match 跟 split 不一样。 split 是说我做分隔。 match的意思是说我去识别,在这个题目中,应该是把所有的单词识别出来。因为正则的匹配是从左到右进行的。这个规则意味着我从左到右一个一个识别出来。识别出来的顺序就是单词的顺序。/[w']+/ 这个就是识别单词的意思。这个中括号表示可选项。这个 w 就是单词的意思。这个'就是 lets 之间的 ' 。这个是单转元素的一个集合,所以这是一个加号
  • 相关阅读:
    高性能MySQL笔记(第十一章 可扩展的MySQL)01
    高性能MySQL笔记(第十章 复制)02
    高性能MySQL笔记(第十章 复制)01
    高性能MySQL笔记(第六章 查询性能优化) 02
    高性能MySQL笔记(一个奇怪的问题)
    高性能MySQL笔记(第六章 查询性能优化) 01
    高性能MySQL笔记(第五章 创建高性能的索引) 02
    高性能MySQL笔记(第五章 创建高性能的索引) 01
    [Luogu] P1438 无聊的数列 | 线段树简单题
    [UCF HSPT 2021] Sharon’s Sausages | 思维 暴力
  • 原文地址:https://www.cnblogs.com/wzndkj/p/11903912.html
Copyright © 2020-2023  润新知