题解 | #句子逆序#
句子逆序
https://www.nowcoder.com/practice/48b3cb4e3c694d9da5526e6255bb73c3
思路:
- 先将整个句子反转,在反转每一个单词
- 将句子反转:每一个单词在句子中的位置反转了
- 再将每一个单词反转:单词变回原样
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { /** * 先句子反转,再单词反转 */ public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.nextLine(); char[] chars = s.toCharArray(); int len = chars.length; exchange(chars, 0, len-1); int l=0, r=0; while(l<len&&r<len){ // 找到每一个单词, l指向单词左边, r指向单词右边的空格 //注意越界问题 while(l<len&&chars[l]==' ') l++; r=l; while(r<len&&chars[r]!=' ') r++; exchange(chars, l, r-1); l=r; } System.out.println(new String(chars)); } private static void exchange(char[] chars, int start, int end){ int len = end - start + 1; for(int i=start; i<start+len/2; i++){ char tmp = chars[i]; chars[i] = chars[end-(i-start)]; chars[end-(i-start)] = tmp; } } }