剑指Offer44:翻转单词顺序列(java)
参考牛客“魅影骑士”的解答:https://www.nowcoder.com/questionTerminal/3194a4f4cf814f63919d0790578d51f3?f=discussion
思路分析:
翻转单词顺序,
先翻转单词部分,后翻转整个句子和先翻转句子再翻转单词,效果一样。
我是先反转句子,然后翻转单词。思路是把字符串转成数组,写一个翻转方法(能够把指定区域的数组元素翻转,参数是:数组名,起始坐标,结束坐标)调用翻转方法输入参数把整个句子翻转,然后遍历数组用两个变量记录一个单词的范围坐标,调用翻转方法翻转单词。
题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
Java代码:
public class Solution {
public String ReverseSentence(String str) {
char []res=str.toCharArray();
int len=str.length();
Reverse(res,0,len-1);
int temp=0;//记录单词起始坐标
for(int i=0;i<len;i++){
if(res[i]==' '){//当i遇到空格时,说明一个单词结束了
Reverse(res,temp,i-1);
temp=i+1;//更新单词的起始坐标
}
else if(i==len-1){//当i指向最后一个字符时,说明整个句子结束了,也即最后一个单词结束了。
Reverse(res,temp,i);
}
}
String result="";
for(int i=0;i<len;i++){//遍历数组把数组转成字符串。
result+=res[i];
}
return result;
}
public static void Reverse(char[]arr,int i,int j){ //翻转函数
while(i<=j){
char temp=arr[i];
arr[i++]=arr[j];
arr[j--]=temp;
}
}
}