题目
给你一个字符数组
s,反转其中 单词 的顺序。单词 的定义为:单词是一个由非空格字符组成的序列。
s中的单词将会由单个空格分隔。必须设计并实现 原地 解法来解决此问题,即不分配额外的空间。
JAVA
方法一:
首先想到的是直接新建和数组然后倒着读,但是要求不能分配额外空间,就只能数组内部交换 ,单词是有序的,直接导致会导致单词混乱,所以先将单词倒置然后在二次倒置的时候单词就是正确的
class Solution {
public void reverseWords(char[] s) {
for (int i = 0; i < s.length; i++){
int flag = -1;
//查找整个单词
for (int j = i; j < s.length; j++){
if(s[j] == 32){
flag = j;
break;
}
}
if(flag == -1){
flag = s.length;
}
//对单词进行反转:blue -> eulb
for (int j = i; j < (i + flag) / 2; j++){
char temp = s[j];
s[j] = s[flag - 1 + i - j];
s[flag - 1 + i - j] = temp;
}
i = flag;
}
//将整个数组倒置
for (int i = 0; i < s.length / 2; i++){
char temp = s[i];
s[i] = s[s.length - 1 - i];
s[s.length - 1 - i] = temp;
}
}
}
这篇文章描述了一种Java方法,用于在字符数组中实现单词顺序的原地反转,不使用额外空间,通过两次遍历和数组内元素交换来完成操作。

405

被折叠的 条评论
为什么被折叠?



