字串反轉
題目:寫一個方法(函式)把提供的字串,反轉過來。
例如:
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, '');
}