题目描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
import java.util.Scanner;
public class Main{
public static String ReverseString(String str){
if(str==null ||str.length()<=0)
return null;
char[] strChar=str.toCharArray();
//1 先反转整个句子:yob a ma I
Reverse(strChar,0,strChar.length-1);
//2 再对每一段进行反转:双指针思想,当i指针碰到空格的时候,就反转从j指针到i指针-1段的字符串
// 反转后,j指针指向i+1(期空格前一个字符)当做下次反转的起点,而i指针继续右移,
// 直到碰到空格
int j=0;
for(int i=0;i<strChar.length;i++){
if(strChar[i]==' ' || i==strChar.length-1){
//如果到了字符串结尾,这时没有空格了,要单独判断一下
if(i==strChar.length-1){
Reverse(strChar,j,i);
return String.valueOf(strChar);
}
Reverse(strChar,j,i-1);
j=i+1;
}
}
return String.valueOf(strChar);
}
public static void Reverse(char[] strChar,int begin,int end ){
while(begin < end){
char temp=strChar[begin];
strChar[begin]=strChar[end];
strChar[end]=temp;
begin++;
end--;
}
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String str=sc.nextLine();
System.out.print(ReverseString(str));
}
sc.close();
}
}