您的位置:首页 > 职场人生

剑指offer面试题42_1翻转单词顺序(java实现)

2017-07-12 15:37 465 查看
整体思想:1.先翻转整个英文句子;2.逐个翻转句子中的每个单词

package com.example.interview42_1;

public class Solution {

public String ReverseSentence(String str) {

//整体思路:1.翻转整个英文句子;2.逐个翻转句子中的每个单词
if (str == null || str.length() <= 0) {
return "";
}

char[] charArray = str.toCharArray();
//1.翻转整个英文句子
int begin = 0;
int end = charArray.length - 1;
//翻转后得到的英文句子
char[] reverseCharArray = Reverse(charArray, begin, end);

//2.逐个翻转 翻转后的英文句子中的每个单词
//需要确定begin和end
begin = end = 0;
while (begin < reverseCharArray.length && end < reverseCharArray.length ) {

if (reverseCharArray[begin] ==' ') {
begin++;
end++;
} else if (reverseCharArray[end] == ' ') {
//如果begin指向字符不为空格,而end指向为空格,此时可以确定一个单词的起始位置
end--;
Reverse(reverseCharArray, begin, end);
//调整begin的位置,end的位置,end需要+1,begin和end位于同样的位置
begin = ++end;

} else {
//如果begin指向字符不为空格,而end指向字符不为空格
end++;
}

}

if (end == reverseCharArray.length) {
end--;
Reverse(reverseCharArray, begin, end);
}

//将reverseCharArray转换为字符串
String string = String.valueOf(reverseCharArray);
return string;

}

public char[] Reverse(char[] charArray, int begin, int end) {

if (charArray == null) {
return null;
}

while (begin < end) {
char temp = charArray[begin];
charArray[begin] = charArray[end];
charArray[end] = temp;
begin++;
end--;
}

return charArray;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试题 剑指offer