344.反转字符串
题解:
public void reverseString(char[] s) {
int left = 0, right = s.length - 1;
char temp = s[0];
while (left <= right) {
temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
541. 反转字符串II
题目链接: 541. 反转字符串II
文档讲解:代码随想录
状态:so easy
思路:每次选取2k个字符,翻转前k个,如果剩余长度不足 k,则反转剩余部分
public String reverseStr(String s, int k) {
// 将字符串转换为字符数组
char[] chars = s.toCharArray();
int i = 0;
// 遍历字符数组,按规则进行反转
while (i < s.length()) {
// 反转从i到i+k-1的字符,如果剩余字符不足k个,则反转到字符串末尾
reverse(chars, i, Math.min(i + k, s.length()) - 1);
// 跳过下一个k个字符
i += 2 * k;
}
// 将字符数组转换为字符串并返回
return new String(chars);
}
public void reverse(char[] chars, int start, int end) {
// 反转指定范围的字符
while (start <= end) {
char temp = chars[start];
chars[start] = chars[end];
chars[end] = temp;
start++;
end--;
}
}
卡码网:54.替换数字
题目链接: 卡码网:54.替换数字
文档讲解:代码随想录
状态:so easy
题解:
public String replace(String s) {
char[] chars = s.toCharArray();
StringBuilder sb = new StringBuilder();
for (char c : chars) {
sb.append(Character.isDigit(c) ? "number" : c);
}
return sb.toString();
}
151.翻转字符串里的单词
题目链接: 151.翻转字符串里的单词
文档讲解:代码随想录
状态:还可以
双指针题解:
public String reverseWords(String s) {
// 去掉字符串两端的空格并将其转换为字符数组
char[] chars = s.trim().toCharArray();
// front 和 rear 初始化为字符数组的最后一个位置
int front = chars.length - 1;
int rear = chars.length - 1;
// 用于存储结果字符串
StringBuilder sb = new StringBuilder();
// 从后向前遍历字符数组
while (front >= 0) {
// 找到当前单词的起始位置
while (front >= 0 && chars[front] != ' ') {
front--;
}
// 将单词添加到 StringBuilder 中,并在末尾添加一个空格
sb.append(chars, front + 1, rear - front).append(' ');
// 跳过单词之间的空格
while (front >= 0 && chars[front] == ' ') {
front--;
}
// 更新 rear 到下一个单词的末尾
rear = front;
}
// 将结果转换为字符串并去掉末尾多余的空格
return sb.toString().trim();
}
使用split+正则:
public String reverseWords(String s) {
// 使用StringBuilder构建最终结果
StringBuilder sb = new StringBuilder();
// 使用正则表达式分割字符串为单词数组
String[] strings = s.split("\\s+");
// 从数组末尾开始,遍历单词并添加到StringBuilder中
for (int i = strings.length - 1; i >= 0; i--) {
sb.append(strings[i]).append(' ');
}
// 去除StringBuilder末尾的空格并返回结果字符串
return sb.toString().trim();
}
卡码网:55.右旋转字符串
题解:
// 定义一个名为rightHand的方法,该方法接受一个字符串s和一个整数k作为参数
public String rightHand(String s, int k) {
// 创建一个StringBuilder对象用于构建新的字符串
StringBuilder sb = new StringBuilder();
// 将字符串s转换为字符数组
char[] chars = s.toCharArray();
// 使用StringBuilder的append方法,先截取字符数组chars的最后k个字符
// 然后截取字符数组chars的前chars.length - k个字符,并将它们拼接起来
sb.append(chars, chars.length - k, k).append(chars, 0, chars.length - k);
// 返回拼接后的字符串
return sb.toString();
}