iT邦幫忙

DAY 24
1

連續30天,挑戰演算法系列 第 24

[Day24] 30 天挑戰演算法 - 反轉文字字串

題目來源:Reverse Word in a String

問題:
給予一個字串,請將字串中的單字排列順序反轉,如果字串中有多個空格,請將多個空格縮減至一個。若字串中沒有文字,則請回傳空字串(empty string)。

例子
假設字串為 "the sky is blue"
則回傳答案則是 "blue is sky the"

想法
這題是以 word 為單位作反轉,而從題目可以知道其 word 的定義就是:『用空白』隔開的字串。
所以我們可以把『空白』當成分隔符號,取出我們所要的 子字串,再將其用相反的方式組合回去。而在組合回去的過程就可以不要去管原本有多少的空格了。
但是,這樣一來可能會遇到一個問題。『如果有多個空格在兩個 word』之間怎麼辦?不就會出錯了嗎?
沒錯!這的確是個大問題!所以,有另一個(偷懶)善工用具的好方法,那就是用 regex expression 來分割字串。

String[] splitedStrArray = inputString.split("\\S+"")

其中:
\\S 代表非空白字元
\+ 代表一個或多個以上
(詳細的 regex expression 支援程度可以查看 Java docs

得到切好的字串陣列後,再用逆向方式並使用 空白 當區隔符號將字串組合回去。

StringBuilder builder = new StringBuilder();
for(int i=splitedStrArray.length-1; i>=0; i--)
    builder.append(splitedStrArray[i]).append(" ");

最後再把尾巴的空白符號給消掉就可以回傳了!

String result = builder.toString().trim();
return result;

上一篇
[Day23] 30 天挑戰演算法 - 加一
下一篇
[Day25] 30 天挑戰演算法 - 最長的共同字首(prefix)
系列文
連續30天,挑戰演算法30

尚未有邦友留言

立即登入留言