目录
翻转字符串里面的单词
正解:
class Solution { public String reverseWords(String s) { //第一步 去除多余空格 StringBuilder sb=removeSpace(s); //第二步 翻转字符串 reverseStr(sb,0,sb.length()-1); //第三步 翻转单词 reverseEachWord(sb); return sb.toString(); } StringBuilder removeSpace(String s){ int l=0,r=s.length()-1; //这里用循环去除首尾空格 while(s.charAt(l)==' ')l++; while(s.charAt(r)==' ')r--; //这里去除中间多余的空格 //if判段条件是:1--字母直接放;2--遇到空格,判断上个字母是不是空格,是[跳过],不是[加入]; StringBuilder sb=new StringBuilder(); while(l<=r){ if(s.charAt(l)!=' ' || sb.charAt(sb.length()-1)!=' '){ sb.append(s.charAt(l)); } l++; } return sb; } void reverseStr(StringBuilder sb,int l,int r){ while(l<r){ char temp=sb.charAt(l); sb.setCharAt(l,sb.charAt(r)); sb.setCharAt(r,temp); l++; r--; } } void reverseEachWord(StringBuilder sb){ int l=0 , r=1; while(l<sb.length()){ //找到一个单词的结束位置 while(r<sb.length() && sb.charAt(r)!=' '){ r++; } //翻转单词 reverseStr(sb,l,r-1);//这里的起始位置不能写0,应该写可变量!!! //准备下一个开始的位置 l=r+1; r=l+1; } } }
左旋字符串
正解:
class Solution { public String reverseLeftWords(String s, int n) { StringBuilder sb=new StringBuilder(s);//这句话不能写在反转函数里面 //1--翻转n之前的字符串 reverse(sb,0,n-1); //2--翻转n之后的字符串 reverse(sb,n,s.length()-1); //3--整体翻转 reverse(sb,0,s.length()-1); return sb.toString(); } void reverse(StringBuilder sb,int l,int r){ while(l<r){ char temp=sb.charAt(l); sb.setCharAt(l,sb.charAt(r)); sb.setCharAt(r,temp); l++; r--; } } }