问题:输入 I am a boy 输出boy a am I
要求:o(1)额外空间 o(n)时间复杂度
分析:最典型的左右手法则用法,只要两次简单的字符串逆序就可以。只是要注意思维上应该再深一点点,你就一定能得到答案。
见下代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class reverseString {
public static void main(String[] args){
BufferedReader bf= new BufferedReader(new InputStreamReader(System.in));
char[] stringDemo = null;
try {
stringDemo = bf.readLine().toCharArray();
System.out.println(stringDemo);
} catch (IOException e) {
e.printStackTrace();
}
reverseString(stringDemo,0,stringDemo.length);
//看第一逆序效果
System.out.println(stringDemo);
int tag=0;
for(int i=0;i<stringDemo.length;i++){
if(stringDemo[i]==' '){
reverseString(stringDemo,tag,i);
tag = i+1;
}
}
//逆序后最终结果
System.out.println(stringDemo);
}
//字符串首位交换即可
public static char[] reverseString(char[] inputString,int i,int len){
char temp;
while(i<len/2){
temp = inputString[i];
inputString[i] = inputString[len-i-1];
inputString[len-i-1] = temp;
i++;
}
return inputString;
}
}