题目描述:
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路:
- 先整体进行翻转,得到:tneduts a ma I.
- 再分别将句子中的每个单词进行翻转,单词翻转可以用两个指针start和end指针,start指向单词的起点,end单词后的空格。
代码:
package offer01;
public class TestNo44 {
public static void main(String[] args) {
String a = "I am a student!";
System.out.println(new TestNo44().ReverseSentence(a));
}
public String ReverseSentence(String str) {
if(str == null || str.length() == 0){
return str;
}
char[] array = str.toCharArray();
reverse(array,0,array.length-1);
int start = 0;//记录单词的起始位置
int end = 0;//记录单词后面的空格,也就是单词的终止位置
while (end<array.length){
if(array[end] != ' '){
//最后一个单词无空格,下面翻转的是最后一个单词
if(end == array.length-1){
reverse(array,start,end);
}
end++;
//当遇到空格的时候,将空格之前的单词进行翻转
}else if(array[end] == ' '){
reverse(array,start,end-1);
end++;
start = end;//下一个单词的起始位置
}
}
return String .valueOf(array);
}
private void reverse(char[] array,int start,int end){
char temp = ' ';
while (start <end){
temp = array[start];
array[start++] = array[end];
array[end--] = temp;
}
}
}
一切都会好的,城南的花都开了 ..
来源:CSDN
作者:胡别致
链接:https://blog.csdn.net/qq_40664693/article/details/104498896