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(' ')
}

最後,請問是否還有其餘解法?
相關文章
相關標籤/搜索