代码随想录算法训练营,9月4日 | 344.反转字符串,541. 反转字符串II,卡码网:54.替换数字
leetcode 344.反转字符串
题目链接:leetcode 344.反转字符串
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰反转字符串
日期:2024-09-04
想法:用临时值保存左边,左右互换就行了。
Java代码如下:
class Solution {
public void reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
while(left < right){
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
}
总结:与链表相比,字符串的操作更像数组。
leetcode 541. 反转字符串II
题目链接:leetcode 541. 反转字符串II
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰反转字符串II
日期:2024-09-04
想法:起始位置每次增加2k,反转位置为i+k-1,但要注意最后面剩余长度不足k的情况,直接比较最后一个字符的位置和反转位置的大小就行了
Java代码如下:
class Solution {
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
for(int i = 0;i < ch.length;i += 2 * k){
int start = i;
int end = Math.min(ch.length - 1,start + k - 1);
while(start < end){
char temp = ch[start];
ch[start] = ch[end];
ch[end] = temp;
start++;
end--;
}
}
return new String(ch);
}
}
卡码网:54.替换数字
题目链接:卡码网:54.替换数字
文档讲解︰代码随想录(programmercarl.com)
日期:2024-09-04
想法:扫描字符串中的数字,扫到了,将长度增长5(为了放'number'),直接可以新定义一个增长的字符串,然后从后往前将字母一一填进去。
Java代码如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
int len = s.length();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) >= 0 && s.charAt(i) <= '9') {
len += 5;
}
}
char[] ret = new char[len];
for (int i = 0; i < s.length(); i++) {
ret[i] = s.charAt(i);
}
for (int i = s.length() - 1, j = len - 1; i >= 0; i--) {
if ('0' <= ret[i] && ret[i] <= '9') {
ret[j--] = 'r';
ret[j--] = 'e';
ret[j--] = 'b';
ret[j--] = 'm';
ret[j--] = 'u';
ret[j--] = 'n';
} else {
ret[j--] = ret[i];
}
}
System.out.println(ret);
}
}