字符串刚开始的三道题较为简单。
344. 反转字符串
双指针分别指向字符串对称的左右两端进行交换即可,代码如下:
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--;
}
}
}
541. 反转字符串Ⅱ
文档讲解:代码随想录
视频讲解:B站视频
状态:第一次做计算反转次数的方法AC,之后阅读文档写出更加简洁的代码需要注意边界判断
这道题需要将按照给定规则来反转字符串,对每2k个字符串可能需要反转多次字符串,因此仍然使用双指针的方法进行反转。具体思路如下:
- 使用for循环遍历数组,在for循环中定义每次迭代的左右指针,迭代的步长为指定的2k
- 在每次迭代时,使用双指针进行反转。
这种思路的代码如下:
class Solution {
public String reverseStr(String s, int k) {
int len = s.length();
char[] ori = s.toCharArray();
int step = 2 * k;
for (int i = 0; i < len; i += step) {
int left = i;
// 此处需要注意边界
int right = Math.min(left + k - 1, len - 1);
// 进行交换
while(left < right) {
char temp = ori[left];
ori[left] = ori[right];
ori[right] = temp;
left ++; right --;
}
}
String res = String.valueOf(ori);
return res;
}
}
卡码网54. 替换数字
文档讲解:代码随想录
状态:对于字符串的可变类需要熟练操作
首先进行一次for循环判断数组的长度,然后根据ASCII码判断返回的char数组长度,再使用一个for循环,进行结果数组的编辑。思路比较简单,代码如下:
public class Replacenum {
public static void main(String[] args) {
try (Scanner in = new Scanner(System.in)) {
String input = in.nextLine();
String result = replacenum(input);
System.out.println(result);
}
}
public static String replacenum(String s) {
String num = "number";
char[] res = s.toCharArray();
int len = res.length;
for (int i = 0; i < res.length; i++) {
if (res[i] <= 57 && res[i] >= 48) {
len += 5;
}
}
char[] result = new char[len];
int j = 0;
for (int i = 0; i < res.length; i++) {
if (res[i] <= 57 && res[i] >= 48) {
for (int k = 0; k < 6; k++) {
result[j] = num.charAt(k);
j++;
}
}
else {
result[j] = res[i];
j++;
}
}
return new String(result);
}
}