版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
解法一:字符串拼接
public class Solution {
public String ReverseSentence(String str) {
if(str.length()==0||str.charAt(0)==' ') return str;
String result = "";
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' '){
String tmp = str.substring(0,i);
result = tmp+" "+result;
str = str.substring(i+1,str.length());
i=0;
}
}
return (str+" "+result).trim(); //去掉后边多的空格
}
}
解法二:总有人更骚。。
public class Solution {
public String ReverseSentence(String str) {
if(str.trim().equals("")) return str;
String[] ss = str.split(" ");
StringBuilder sb = new StringBuilder();
for(int i=ss.length-1;i>=0;i--){
sb.append(ss[i]);
if(i!=0){
sb.append(" ");
}
}
return sb.toString();
}
}
解法三:脱离语言特性
思路: 如同上题,先整体转置然后各个单词置换
public class Solution {
public String ReverseSentence(String str) {
if(str.length()==0) return str;
char[] array = str.toCharArray();
reverse(array,0,array.length-1);
int i=0;
int low,high;
while(i<array.length){
while(i<array.length&&array[i]==' ') i++; //跳过空格
low = i;
while(i<array.length&&array[i]!=' '){
i++;
}
high = i-1;
reverse(array,low,high);
}
return String.valueOf(array);
}
private void reverse(char[] array,int low,int high){
while(low<high){
char tmp = array[low];
array[low++] = array[high];
array[high--] = tmp;
}
}
}