java给定一个字符数组, 要求去掉首尾的空格,同时其他位置的空格合并为一个空格。要求时间复杂度O(n), 空间复杂度O(1)。
时间: 2023-06-11 07:05:53 浏览: 99
可以采用类似双指针的方法,一个指针指向当前处理的位置,一个指针指向处理后的位置。具体步骤如下:
1. 去掉首部空格:从头开始遍历数组,跳过空格,当遇到非空格字符时停下。
2. 合并其他位置的空格:从非空格字符位置开始,继续遍历数组,遇到连续的空格时只保留一个空格。
3. 去掉尾部空格:从尾部开始向前遍历数组,跳过空格,当遇到非空格字符时停下。
4. 将处理后的字符复制到原数组中。
代码实现如下:
```java
public static void trim(char[] chars) {
int start = 0, end = chars.length - 1;
// 去掉首部空格
while (start <= end && chars[start] == ' ') {
start++;
}
// 合并其他位置的空格
boolean flag = false;
int index = start;
for (int i = start; i <= end; i++) {
if (chars[i] == ' ') {
if (flag) continue;
flag = true;
} else {
flag = false;
}
chars[index++] = chars[i];
}
// 去掉尾部空格
while (index > start && chars[index - 1] == ' ') {
index--;
}
// 复制处理后的字符到原数组中
System.arraycopy(chars, start, chars, 0, index - start);
}
```
时间复杂度为O(n),空间复杂度为O(1)。
阅读全文