classSolution{public String reverseWords(String s){char[] ss = s.toCharArray();int n = s.length();// 翻转整个字符串reverse(ss,0,n-1);//reWord(ss,n);// 翻转单词word_reverse(ss,n);// 删除多余的空格returndelek(ss,n);}// 反转整个字符串publicvoidreverse(char[] ss,int i ,int j){while(i<j){char tem = ss[i];
ss[i++]=ss[j];
ss[j--]=tem;}}// 反转单个的字符串// public void reWord(char[] c,int n){// int j =0;// int i =0;// while(j<n){// while(i<n && c[i]==' ') i++; // 寻找不是空字符的第一个字符 首位置// j=i; // while(j<n && c[j]!=' ') j++; // 寻找当前单词的最后一个字符 末位置// reverse(c,i,j-1); // 纠正单个单词// i=j;// }// }privatevoidword_reverse(char[] s_arr,int n){int i =0;int j =0;while(j < n){// 找到第一个首字母while(i < n && s_arr[i]==' ') i++;
j = i;// 末位置while(j < n && s_arr[j]!=' ') j++;reverse(s_arr, i, j -1);
i = j;}}// 去除空格public String delek(char[] c ,int n){int i =0;int j =0;while(j<n){while(j<n && c[j]==' ') j++;// 寻找不是空字符的第一个字符while(j<n && c[j]!=' ') c[i++]=c[j++];// 第一个字符与第一个不是空的字符进行覆盖while(j<n && c[j]==' ') j++;// 寻找下一个不是空字符的字符if(j<n) c[i++]=' ';// 赋值一个空格 将上一个单词与下一个单词隔开}returnnewString(c).substring(0,i);}}
左旋转字符串
classSolution{public String reverseLeftWords(String s,int n){
StringBuilder res =newStringBuilder();for(int i = n; i < s.length(); i++)
res.append(s.charAt(i));for(int i =0; i < n; i++)
res.append(s.charAt(i));return res.toString();}}