当前位置:   article > 正文

leetcode-08-[151]翻转字符串里的单词[卡码网55]右旋转字符串

leetcode-08-[151]翻转字符串里的单词[卡码网55]右旋转字符串

一、[151]翻转字符串里的单词

重点:见注释

  1. class Solution {
  2. public String reverseWords(String s) {
  3. //1、移除多余的空格
  4. StringBuilder stringBuilder = removeSpace(s);
  5. //2、反转整个字符串
  6. reverse(stringBuilder,0,stringBuilder.length()-1);
  7. //3、反转每个单词
  8. reverseEachWord(stringBuilder);
  9. return stringBuilder.toString();
  10. }
  11. StringBuilder removeSpace(String s){
  12. StringBuilder stringBuilder=new StringBuilder();
  13. int left=0,right=s.length()-1;
  14. while(s.charAt(left)==' '){
  15. left++;
  16. }
  17. while(s.charAt(right)==' '){
  18. right--;
  19. }
  20. for(int i=left;i<right+1;i++){
  21. if(s.charAt(i)!=' '){
  22. stringBuilder.append(s.charAt(i));
  23. }else if(stringBuilder.charAt(stringBuilder.length()-1)!=' '){
  24. //若结束位置不为空格,则加个空格,否则什么也不做
  25. stringBuilder.append(s.charAt(i));
  26. }
  27. }
  28. return stringBuilder;
  29. }
  30. //设置开始结束的标记
  31. void reverse(StringBuilder stringBuilder,int left,int right){
  32. while(left<right){
  33. char tmp = stringBuilder.charAt(left);
  34. //设置值setCharAt
  35. stringBuilder.setCharAt(left,stringBuilder.charAt(right));
  36. stringBuilder.setCharAt(right,tmp);
  37. left++;
  38. right--;
  39. }
  40. }
  41. //注意一下
  42. void reverseEachWord(StringBuilder stringBuilder){
  43. int left=0,right=1;
  44. int n=stringBuilder.length();
  45. while(left<n){
  46. while(right<n&&stringBuilder.charAt(right)!=' '){
  47. right++;
  48. }
  49. reverse(stringBuilder,left,right-1);
  50. left=right+1;
  51. right=left+1;
  52. }
  53. }
  54. }

二、[卡码网55]右旋转字符串

重点:技巧

反转三次

  1. import java.util.Scanner;
  2. public class Main{
  3. public static void main (String[] args) {
  4. Scanner in=new Scanner(System.in);
  5. int n=Integer.parseInt(in.nextLine());
  6. String s=in.nextLine();
  7. int len=s.length();
  8. char[] chars=s.toCharArray();
  9. reverse(chars,0,len-1);
  10. reverse(chars,0,n-1);
  11. reverse(chars,n,len-1);
  12. System.out.println(chars);
  13. }
  14. public static void reverse(char[] ch,int start,int end){
  15. while(start<end){
  16. char tmp=ch[start];
  17. ch[start]=ch[end];
  18. ch[end]=tmp;
  19. start++;
  20. end--;
  21. }
  22. }
  23. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/722234
推荐阅读
相关标签
  

闽ICP备14008679号