剑指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;
}
}
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面试题42:翻转单词顺序;左旋转字符串 Java实现
- 剑指Offer面试题41和为s的两个数字与和为s的连续正数序列,面试题42翻转单词顺序与左旋转字符串
- 剑指offer-面试题42:翻转单词顺序VS左旋转字符串
- 剑指Offer----面试题42(1):翻转单词顺序
- 剑指offer 面试题42 翻转单词顺序 VS 左旋转字符串
- 剑指offer-面试题42-翻转单词顺序VS左旋转字符串
- 【剑指offer】面试题42-翻转单词顺序VS左旋转字符串
- 【剑指offer】面试题42:单词翻转顺序&左右旋转字符串
- 剑指Offer面试题42(Java版):反转单词顺序VS左旋转字符串
- 剑指Offer_面试题42_翻转单词顺序 VS 左旋转字符串
- 剑指offer之面试题42翻转单词顺序VS左旋转字符串
- 剑指offer 面试题42 翻转单词顺序 | 左旋转字符串
- 【剑指offer】6.3知识迁移能力——面试题42:翻转单词顺序VS左旋转字符串
- 剑指offer——面试题42:(一)翻转单词顺序
- 剑指offer 面试题42—翻转单词顺序VS左旋转字符串
- [剑指offer][面试题42]翻转单词顺序 VS 左旋转字符串
- 【剑指offer-Java版】42翻转单词顺序VS左旋转字符串
- 剑指offer——面试题42-2:翻转单词顺序
- 【剑指Offer学习】【面试题42:翻转单词顺序vs左旋转字符串】
- 剑指offer42:翻转单词顺序