jotting

ⓁⒸ ‧‧‧ 344. Reverse String

344. Reverse String 反轉字串

❀ Origin

Problem

Write a function that takes a string as input and returns the string reversed.

Example

1
Given s = "hello", return "olleh".

❀ 翻譯

問題

寫出一個能夠將字串當作輸入並回傳相反後字串的函數.


❀ Solution

JavaScript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
* @param {string} s
* @return {string}
*/
// var reverseString = function(s) {
// // 建立頭中尾的部分
// var top = '';
// var mid = '';
// var bottom = '';

// // 如果字串長度為奇數, 傳入中間的字符當作 mid
// s.length % 2 == 0 ? (mid = '') : (mid = s[Math.floor(s.length / 2)]);

// // 使用頭尾互換的方式填入 迴圈少跑一半
// /**
// * h e l l o
// * ===========
// * 0 1 2 3 4
// * 0 4
// * 1 3
// * mid = s[2]
// * top = s[4] + s[3]
// * bottom = s[1] + s[0]
// *
// */
// for (let i = 0; i < Math.floor(s.length / 2); i++) {
// // 最初和最鏡面對應的值交換
// top = top + s[s.length - 1 - i];
// bottom = s[i] + bottom;
// }
// return top + mid + bottom;
// };

// 原本以為一開始的for迴圈跑一半的方式會比較快,
// 但原生的 split('') 分成陣列,
// 在用 reverse() 對陣列反轉,
// 之後用 join('') 將陣列組合成字串.
// 實測比較快, 快大概 30~40% 的時間
var reverseString = function(s) {
return s.split('').reverse().join('')
};


console.log(reverseString('abcde'));

Golang

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func reverseString(s []byte) {
// 使用解法一的邏輯,
// 頭尾互換,並一層一層地向內。
// 在 for 迴圈中,
// 初始化: i 為起點位置、 j 為終點位置;
// 條件為:起點位置 小於 終點位置 的時候;
// Afterthought 事後動作:起點往後、終點往前。
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
}

// 使用 golang 的方式即可將 js 的解題方式寫成兩行,
// 世界又更美好了,Inner Peace。
}