iOS 15.2 及 iPadOS 15.2 正式版釋出:新功能快速瞭解
阿新 • • 發佈:2021-12-17
給你一個字串 s ,逐個翻轉字串中的所有 單詞 。
單詞 是由非空格字元組成的字串。s 中使用至少一個空格將字串中的 單詞 分隔開。
請你返回一個翻轉 s 中單詞順序並用單個空格相連的字串。
說明:
輸入字串 s 可以在前面、後面或者單詞間包含多餘的空格。
翻轉後單詞間應當僅用一個空格分隔。
翻轉後的字串中不應包含額外的空格。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/reverse-words-in-a-string
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
心之所向,素履以往 生如逆旅,一葦以航import java.util.Scanner; class Solution { private void swap(StringBuilder sb, int a, int b) { char t = sb.charAt(a); sb.setCharAt(a, sb.charAt(b)); sb.setCharAt(b, t); } private void reverse(StringBuilder sb, int start, int end) { while (start < end) { swap(sb, start++, end--); } } public String reverseWords(String s) { StringBuilder sb = new StringBuilder(); for (int i = s.length() - 1; i >= 0; --i) { if (s.charAt(i) != ' ') { sb.append(s.charAt(i)); } else if (sb.length() != 0 && sb.charAt(sb.length() - 1) != ' ') { sb.append(" "); } } if (sb.charAt(sb.length() - 1) == ' ') { sb.deleteCharAt(sb.length() - 1); } int left = 0; for (int i = 1; i < sb.length(); ++i) { if (sb.charAt(i) == ' ') { reverse(sb, left, i - 1); left = i + 1; } } reverse(sb, left, sb.length() - 1); return sb.toString(); } public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { System.out.println(new Solution().reverseWords(in.nextLine())); } } }