题目:
给定一个字符类型的数组 chas,请在单词间做逆序调整。只要做到单词的顺序逆序即可,对空格位置没有特别要求。
举例:
“dog loves pig”,调整成 “pig loves dog”。
“I’m a student.”,调整成”student. a I’m”。
思路:
先把 chas 整体逆序,再把每一个单词逆序。
代码实现:
//逆序整体之后把每个单词逆序回来
public static void rotateWord(char[] chas) {
if (chas == null || chas.length == 0) {
return;
}
reverse(chas, 0, chas.length - 1);
int left = -1;
int right = -1;
//把每个单词逆序回来 现在是"gip sevol god"
for (int i = 0; i < chas.length; i++) {
//当当前字符不是空格的时候
if (chas[i] != ' ') {
//找到每一个单词的第一个字母和最后一个字母的位置,用left和right表示
//如果当前遍历的位置是0 或者当前位置的前一个位置是空格,那么说明当前位置是一个单词的开头
left = i == 0 || chas[i-1] == ' ' ? i : left;
//如果当前遍历的位置是chas.length-1 或者当前位置的下一个位置是空格,那么说明当前位置是一个单词的结尾
right = i == chas.length-1 || chas[i+1] == ' ' ? i : right;
}
if (left != -1 && right != -1) {
//逆序每一个单词
reverse(chas,left,right);
//将left和right复原为-1,继续下一次遍历,找下一个需要逆序的单词的left和right
left = -1;
right = -1;
}
}
}
//逆序整体
public static void reverse(char[] chas, int start, int end) {
char tmp = 0;
while (start < end) {
tmp = chas[start];
chas[start] = chas[end];
chas[end] = tmp;
start++;
end--;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/87941.html