目录
一、原题再现
二、问题分析
三、完整代码
一、原题再现
倒置字符串_牛客题霸_牛客网
描述
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
输入描述:
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100
输出描述:
依次输出倒置之后的字符串,以空格分割
示例1
输入:
I like beijing.
输出:
beijing. like I
二、问题分析
本题解题思路很简单,只需要将每个单词单独置换,再将所有单词整个置换即可。
使用StringBuilder类,将String类转换StringBuilder类做字符串的拼接时空复杂度效率更佳。
本题方法一先用split()方法,将整个字符串按照空格划分,然后使用for循环对每个划分出来的单词进行置换,并逐一和空格拼接起来。最后整个置换,并使用trim()方法去掉两端空格。
本题方法二将String类转换成字符数组,利用while循环和自己写的置换方法。
关于字符串的相关操作可以参考这两篇博客:Java基础之神奇String类(一)_小熊爱吃软糖吖的博客-CSDN博客
Java基础之神奇String类(二)_小熊爱吃软糖吖的博客-CSDN博客
三、完整代码
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); Scanner sc = new Scanner(System.in); String str = sc.nextLine(); String[] splitStr = str.split(" "); for (String s : splitStr) { s = traver(s); sb = sb.append(s + ' '); } String ans = sb.toString(); ans = traver(ans); ans = ans.trim(); System.out.println(ans); } public static String traver(String str) { char[] array = str.toCharArray(); int len = array.length; for (int i = 0; i < len / 2; i++) { char tmp = array[i]; array[i] = array[len - i - 1]; array[len - i - 1] = tmp; } String strAfter = new String(array); return strAfter; } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str=in.nextLine(); char[]array=str.toCharArray(); reverse(array,0,array.length-1); int right=0; int left=0; while(left<array.length){ if(right<array.length&&array[right]!=' '){ right++; continue; } reverse(array,left,right-1); left=right+1; right=left; } String ans=new String(array); System.out.println(ans); } public static char[] reverse(char[]array,int start,int end){ while(start<end){ char tmp=array[start]; array[start]=array[end]; array[end]=tmp; start++; end--; } return array; } }