import java.util.Scanner; public class Day8 { // 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 // 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 // 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 // 注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中, // 单词间应当仅用单个空格分隔,且不包含任何额外的空格。 //1.删除多余空格 //2.翻转整个字符串 //3.再次翻转所有单词 public static String reverseWords1(String s) { char[] str=s.toCharArray(); str=deleteSpace(str); reverse(str,0,str.length-1); System.out.println(str.length); for(int left=0,right=0;right<=str.length;right++) { if((right==str.length)||str[right]==' ') {//right==str.length条件一点要摆在str[right]==' '前面, // 不然到串尾部时先判断str[right]==' '时会报错 reverse(str,left,right-1); left=right+1; } } return new String(str); } //删除空格方法 public static char[] deleteSpace(char[] chars){ int slow = 0; for (int fast = 0; fast < chars.length; fast++) { //先用 fast 移除所有空格 if (chars[fast] != ' ') { //在用 slow 加空格。 单词末尾要加空格 if (slow != 0)//除第一个单词外 chars[slow++] = ' '; //fast 遇到空格或遍历到字符串末尾,就证明遍历完一个单词了 while (fast < chars.length && chars[fast] != ' ') chars[slow++] = chars[fast++]; } } //相当于 c++ 里的 resize() char[] newChars = new char[slow]; System.arraycopy(chars, 0, newChars, 0, slow); return newChars; } public static void reverse(char[] s,int i, int k) {//从i开始到k翻转,k最大为s.length-1 char temp; for (; i < k; i++,k--) { temp = s[i]; s[i] = s[k]; s[k] = temp; } } //方法2:创建一个新char数组,然后将主数组从尾部遍历将单词从尾部正序输入到新的char数组中 public static String reverseWords2(String s) { char[] str=s.toCharArray(); char[] newArr=new char[str.length]; int begin=0,end=str.length-1; for(;end>=0;end--){ if(str[end]!=' '){ int i=end; if(begin!=0) newArr[begin++]=' '; while((end>=0)&&(str[end]!=' ')){ end--; } for(int j=end+1;j<=i;j++){ newArr[begin++]=str[j]; } } } char[] newChars = new char[begin]; System.arraycopy(newArr, 0, newChars, 0, begin); return new String(newChars); } // 字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k, // 请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。 // 例如,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。 //只需要翻转再翻转即可 //先反转整体,在翻转前部串和后部串 public static void main(String[] args) { Scanner sc=new Scanner(System.in); int k = Integer.parseInt(sc.nextLine()); String s=sc.nextLine(); char[] chars=s.toCharArray(); reverse(chars,0,chars.length-1); reverse(chars,0,k-1); reverse(chars,k,chars.length-1); System.out.println(chars); } }
07-23
826
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)