leetcode真题-简单算法:反转字符串中的单词

题目: 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

  • eg:

    输入: "Let's take LeetCode contest"
    输出: "s'teL ekat edoCteeL tsetnoc" 
  • 解题思路

    • 字符串拆分为数组, 数组的顺序也便是字符的顺序
    • 反转字符
    • 重新拼接字符即可
  • 代码如下

    export default (str) => {
      // 字符串拆分为数组, 数组的顺序也便是字符的顺序
      var arr = str.split(' ')
      // 反转字符
      var result = arr.map(item => {
        // item 为字符串,没有reverse 方法,需转为数组
        return item.split('').reverse().join('')
      })
    
      return result.join(' ')
    }
    是不是很简单,清晰易懂啊!
  • 利用Jest做单元测试

    import revertByWorld from '../lesson1'
    
    test('反转字符串中的单词', () => {
      expect(revertByWorld('Let\'s take LeetCode contest')).toBe('s\'teL ekat edoCteeL tsetnoc')
    })
    
测试结果如下,测试通过


  • 貌似不错,不过代码似乎仍有优化的空间,毕竟,好的代码是不断重构出来的

    export default (str) => {
      // 反转字符
      return str.split(/\s/g).map(item => {
        return item.split('').reverse().join('')
      }).join(' ')
    }
这个就更加简练一些

还有没有其他解法?我们要不断问自己该问题,开阔思路
  • 利用正则去匹配,貌似也可行。不过不知为何在Leetcode中提交时却不通过,知道的朋友麻烦告知下,谢谢。

    // \w 匹配字母数字或下划线  + 重复一次或更多次。 匹配到空格时便会中断。
    
    export default (str) => {
      // 反转字符
      return str.match(/[\w']+/g).map(item => {
        return item.split('').reverse().join('')
      }).join(' ')
    }
    

》》》 最后,请问是否还有其他解法?

你可能感兴趣的