编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s
的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
class Solution {
public void reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
while (left < right) {
swapString(s, left, right);
if (left < s.length && right >= 0) {
left++;
right--;
}
}
}
public void swapString(char[] s, int left, int right) {
char tmp = s[right];
s[right] = s[left];
s[left] = tmp;
}
}
给定一个字符串 s
和一个整数 k
,从字符串开头算起,每计数至 2k
个字符,就反转这 2k
字符中的前 k
个字符。
- 如果剩余字符少于
k
个,则将剩余字符全部反转。 - 如果剩余字符小于
2k
但大于或等于k
个,则反转前k
个字符,其余字符保持原样。
class Solution {
public String reverseStr(String s, int k) {
int n = s.length();
char[] arr = s.toCharArray();
for (int i = 0; i < n; i += 2 * k) {
reverse(arr, i, Math.min(i + k, n) - 1);
}
return new String(arr);
}
public void reverse(char[] arr, int left, int right) {
while (left < right) {
char temp = arr[left];
arr[left++] = arr[right];
arr[right--] = temp;
}
}
}
给定一个字符串 s
,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
class Solution {
public String reverseWords(String s) {
char[] c = s.toCharArray();
int left = 0;
int right = 0;
int p = 0;
while (p < c.length) {
if (c[p] == ' ') {
right = p - 1;
swapChar(c, left, right);
left = p + 1;
p++;
} else {
p++;
}
}
right = p - 1;
swapChar(c, left, right);
return new String(c);
}
public void swapChar(char[] s, int left, int right) {
while (left <= right) {
char tmp = s[left];
s[left++] = s[right];
s[right--] = tmp;
}
}
}
给你一个字符串 s
,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s
中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s
中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。