新手練習,學習進度剛到 IO
解題目的是為了訓練自己的思考模式還有熟悉度,肯定不是最佳解
這題速度意外的出乎意料
Runtime: 4 ms, faster than 91.53% of Java online submissions for Reverse Words in a String.😄
本來都挑Easy的題目來做,後來發現!!!!!
Easy的都不easy啊 =..=
題目:Given an input string s, reverse the order of the words.
題目大意:提供一個字串,翻轉所有單字
作法一
使用String API
trim() 方法將前後的空白字元刪除
split()方法分離出每一個單字
創建一個字元陣列存放方離出來的單字
重新拼接所有單字
作法二
為了多做一點練習,選擇了不使用trim() 跟 split() 2個方法來實現這個題目
class Solution {
public String reverseWords(String s) {
//先判斷是否包含" ",如果沒有則直接回傳輸入值s
if(!s.contains(" ")) return s;
//判斷開頭是否是" ",如果是則從索引值1開始取值
//使用startWith的速度比indexOf還要快
while(s.startsWith(" ")){
s=s.substring(1);
}
//判斷結尾是否是" ",如果是則從索引值0取到倒數第二位
//使用endtWith的速度比lastIndexOf還要快
while(s.endsWith(" ")){
s=s.substring(0,s.length()-1) ;
}
//取出第一個" "的索引值
int left =s.indexOf(" ");
int index;
int len =s.length();
StringBuilder sb = new StringBuilder();
int right=len;
do {
//取" "的索引值
index = s.lastIndexOf(" ",right-1);
//取2次索引值中間的字元
String word = s.substring(index+1 , right);
//將取出的字元拼接
if(!word.equals(""))sb.append(word).append(" ");
//更新右邊索引條件
right =index;
}while(index>=left);
//有" "就將空白刪除
sb.delete(sb.lastIndexOf(" "),sb.lastIndexOf(" ")+1);
return sb.toString();
}
}
程式設計思路寫得很好喔,透過註解能更清楚每一步驟流程動作,這是個好習慣;期待還有新的程式製作練習解析。