LeetCode演算法題-Reverse Words in a String III(Java實現)
這是悅樂書的第259 次更新,第272 篇原創
01 看題和準備
今天介紹的是LeetCode演算法題中Easy級別的第126題(順位題號是557)。給定一個字串,您需要反轉句子中每個單詞中的字元順序,同時仍保留空格和初始單詞順序。例如:
輸入:“Let's take LeetCode contest”
輸出:“s'teL ekat edoCteeL tsetnoc”
注意:在字串中,每個單詞由單個空格分隔,並且字串中不會有任何額外的空格。
本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。
02 第一種解法
將s按照空格拆分為字串陣列,然後對陣列中的每一個元素做翻轉,再以空格拼接,作為結果返回。
public String reverseWords(String s) { String[] arr = s.split(" "); StringBuilder result = new StringBuilder(); for (int i=0; i<arr.length; i++) { String ss = arr[i]; StringBuilder sb = new StringBuilder(ss); sb.reverse(); arr[i] = sb.toString(); if (i == arr.length-1) { result.append(arr[i]); } else { result.append(arr[i]+" "); } } return result.toString(); }
03 第二種解法
對於第一種解法我們還可以再優化下。
public String reverseWords2(String s) { String[] arr = s.split(" "); StringBuilder result = new StringBuilder(); for (String ss : arr) { result.append(new StringBuilder(ss).reverse().toString()+" "); } return result.toString().trim(); }
04 第三種解法
我們也可以直接在字串內部進行操作。將以空格分割開的單個單詞為一個物件,對其中的字元進行互換。先將s轉為字元陣列,如果當前字元不為空格,索引就繼續向後移動,直到遇到空格為止,此時我們獲取了第一個單片語成的字元的起始索引,再使用一次迴圈,將其字元進行反轉,然後將索引還原。最後將字元陣列轉為字串返回即可。
public String reverseWords3(String s) { char[] arr = s.toCharArray(); for (int i=0; i<arr.length; i++) { if (arr[i] != ' ') { int j = i; while (i<arr.length && arr[i] != ' ') { i++; } i--; int index = i; while (j < i) { char temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; j++; i--; } i = index; } } return new String(arr); }
05 小結
演算法專題目前已日更超過三個月 ,演算法題文章126 +篇,公眾號對話方塊回覆【資料結構與演算法 】、【演算法 】、【資料結構 】中的任一關鍵詞,獲取系列文章合集。
以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支援!