Skip to main content

字串反轉

題目:寫一個方法(函式)把提供的字串,反轉過來。

例如:

ex1: 輸入 'abcde' 輸出 'edcba'
ex2: 輸入 'lkjhsdgf' 輸出 'fgdshjkl'

非常常見的題目。

看答案以前先自己寫寫看吧。

.

.

.

提示: 簡單的迴圈就可以解了!

先來看看 Java 解法:

private static String reverseString(String str) {

String result = "";

for(int i = str.length()-1 ; i >= 0; i--) {
result += str.charAt(i);
}

return result ;
}

str.length()-1 字串長度 -1 表示原始字串的最後一個字。

Java 主要是用 charAt() 這個方法來找到字串的 index。 然後迴圈從陣列長度開始,由後往前遞減。

迴圈也可以這樣:

private static String reverseString(String str) {

String reversed = "";

for (int i = 0; i <= str.length() -1; i++) {
reversed = str.charAt(i) + reversed;
}

return reversed;
}

Java 第二種解法,使用 StringBuilder 物件內的 reverse() 方法

private String reverseString(String str){

// StringBuilder ary = new StringBuilder(str);
// ary.reverse();
// return ary.toString();

// simplify

return new StringBuilder(str).reverse().toString();

}

JavaScript 解法如下

第一種解法,用迴圈:

function reverseString(str){

let result = '';

for(let i = str.length; i>=1; i--){
result += str[i-1]
}

return result

}

js 因為可以直接用陣列的方式 str[i-1] 去取得字串的 index ,所以會比較簡短一點。

另外,js 還可以使用字串的內建函數 split, reverse, join 來做,更快速。

迴圈的第二種,這樣也可以:

function reverseString(str) {

reversed = '';

for(character of str) {
reversed = character + reversed;
}

return reversed
}

這是 js 的第二種解法:

function reverseString(str){
const result = str.split('').reverse().join('')
return result
}

這三個函數功能說明分別如下:

const str = 'abcdef'

// 先用 split 切割成陣列
const strSplit = str.split('');
console.log(strSplit);
// output
// [ 'a', 'b', 'c', 'd', 'e', 'f' ]

// 反轉陣列
const strReverse = strSplit.reverse()
console.log(strReverse)
// output
//[ 'f', 'e', 'd', 'c', 'b', 'a' ]

// 陣列轉回字串
const strJoin = strReverse.join('');
console.log(strJoin);
// output
// fedcba

// 所以可以3個方法一起來
const result = str.split('').reverse().join('')
console.log(result);
// output
// fedcba

js 第三種:用 Array.prototype.reduce()

這個方法要先熟悉 Array.prototype.reduce() 請見 MDN

這方法有點殺雞用牛刀,但可以跟面試官表示你故意使用 reduce() 方法展現一下,讓面試官對你稍微記得多一點。

function reverseString(str){
return str.split('').reduce((rev, char) => char + rev, '');
}

此文章同時發佈於鐵人賽 2020