题目: 给定一个字符串,需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例: 输入: "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(' ')
}
最后,请问是否还有其他解法?
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。