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

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

示例: 输入: "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(' ')
}

最后,请问是否还有其余解法?
相关文章
相关标签/搜索