do-exercise-倒置字符串

问题描述

将一句话的单词进行倒置,标点不倒置。比如 “I like beijing.”,经过处理后变为:“beijing. like I”。字符串长度不超过100。

输入描述

输入一个仅包含小写字母、空格、‘.’ 的字符串,长度不超过100。
‘.’ 只出现在最后一个单词的末尾。

输出描述

依次输出倒置之后的字符串,以空格分割。

题目链接:倒置字符串

思路分析

  1. 一切有关于字符串的问题,其核心一定都是遍历;
  2. 观察倒置前后的差别,该问题的倒置可以分为2步:
    2.1. 整体倒置输入的字符串;
    2.2.根据空格分割单词,分别倒置每个子字符串;

代码实现

import java.util.Arrays;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * 倒置字符串
 * Date: 2022-11-06
 * Time: 17:08
 */
public class Main {
    
    
    //倒置函数,输入参数分别代表:需要倒置的字符串、倒置字符串的起始位置、结束位置
    private static void reserve(char [] arr,int start,int end){
    
    
        while (start<end){
    
    
            char tmp=arr[start];
            arr[start]=arr[end];
            arr[end]=tmp;
            start++;
            end--;
        }

    }
    public static void main(String[] args) {
    
    
        Scanner scan=new Scanner(System.in);
        //输入的字符串可能含有空格,因此要注意使用nextLine();
        String str=scan.nextLine();
        char [] s= str.toCharArray();   //将字符串转换为数组,方便倒置
        int len=s.length;
        //整体倒置字符串
        reserve(s,0,len-1);
        //分别倒置每个子字符串
        int i=0;
        while (i<len){
    
    
            int j=i;
            //通过空格区分每个子字符串
            while (j<len&&s[j]!=' '){
    
    
                j++;
            }
            //j<len代表不是最后一个子字符串
            if(j<len){
    
    
                reserve(s,i,j-1);

                i=j+1;  //此时j所在的位置是空格,因此i需要指向空格的下一个字符
            }else {
    
    
                //代码执行到此处的条件是:j指向了字符串的最后一个字符
                reserve(s,i,j-1);
                i=j;    //不可以是i=j+1,会造成数组越界
            }
        }
        String s1=new String(s);    //如果直接使用toString()方法,在牛客系统上无法通过
        System.out.println(s1);

    }

}

在这里插入图片描述
当然,如果是单单为了解决这个问题,自然也有更加简单的方法,即使用一些库函数来完成:

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * 倒置字符串
 * Date: 2022-11-06
 * Time: 17:45
 */
public class test {
    
    
    public static void main(String[] args) {
    
    
        Scanner scanner=new Scanner(System.in);
        String str=scanner.nextLine();
        String[] arr=str.split(" ");    //以空格来分割字符串,使用一个String类型的数组来接收
        StringBuilder builder=new StringBuilder();
        for (int i=arr.length-1;i>=0;i--){
    
    
            builder.append(arr[i]+" ");     //从这个字符数组的最后一个字符开始,在末尾追加空格
        }
       // builder.deleteCharAt(builder.length()-1);     //这行代码时删除字符串指定索引位置的字符,在此处不影响运行结果
        System.out.print(builder.toString());
    }
}

在这里插入图片描述
over!

猜你喜欢

转载自blog.csdn.net/weixin_54175406/article/details/127718267