344. 我仅有的18位铁粉们(假的,看到这题岂不是行手拈来?第一眼没思路的同学建议关注我一波,然后从我的第一篇文章看起哈哈哈开玩笑。这题就是经典双指针,然后就交换就行了。
public void reverseString(char[] s) {
int left = 0;
int right = s.length-1;
while(left <= right){
//交换,写不出来的同学该回去补补基础了昂
char tmp = s[left];
s[left] = s[right];
s[right] = tmp;
left++;
right--;
}
}
541. 额,反正就是说这个题目真的解释的很垃圾。根本看不懂,例子也不多给几个解释。应该就是,每隔2k个字符,对前k个字符进行反转,就这么理解就行了。反转的部分就和上一题一样的。
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
// 每隔2k个字符,对前k个字符进行反转
for (int i = 0; i < ch.length; i += 2 * k) {
// 检测end是否会越界
int start = i, end = Math.min(i + k - 1, ch.length - 1);
swap(ch, start, end);
}
return new String(ch);
}
public void swap(char[] ch, int start, int end) {
while (start < end) {
char tmp = ch[start];
ch[start++] = ch[end];
ch[end--] = tmp;
}
}
卡码网54. 这题就很简单了,前面我们用了很多次的stringbuilder,然后主要知道isDigit()这个方法就行了,easy easy 洒洒水啦。
public static String replaceDigitsWithWord(String s) {
StringBuilder result = new StringBuilder();
for (char c : s.toCharArray()) {
// 检查字符是否为数字
if (Character.isDigit(c)) {
// 如果是数字,替换为"number"
result.append("number");
} else {
// 如果是字母,保持不变
result.append(c);
}
}
return result.toString();
}
151. 这题第一次做可能很细节的地方会处理不好,但是做过一遍就好了。在字符串的操作里stringbuilder还是会经常用到了,也可以双指针但是太复杂了还是老老实实,简单点的好哈哈。思路:拆分字符串然后反向拼接就OK了,注意不能用reverse()方法,会反转每个字母而不是单词。
public String reverseWords(String s) {
s = s.trim();//去除前后空格
//可能存在多个空格分割一个单词,所以用正则“\\s+”去匹配所有空格!
String[] st = s.split("\\s+");
StringBuilder sb = new StringBuilder();
//反向填充,不能用sb.reverse(),因为会反转每个字母,而不是单词了
for(int i=st.length-1; i>=0; i--){
sb.append(st[i]);
// 这里末尾最后会多一个空格记得删除
sb.append(" ");
}
//返回结果,最后还要最掉末尾多一个的空格
return sb.toString().trim();
}
卡码网55. 这题也简单的,直接用string的方法进行拼接如接图2,或者用stringbuilder也行如图1。但是可能大佬喜欢高级点,用什么负负得正去解决,我是懒得再去看他们的解法了,自己能写出来就行了,累了今天写了5题了。(再次吐槽第二题,真的恶心,看不懂题目,浪费我太久时间,头痛。)
图1:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int k = sc.nextInt();
String s = sc.next();
StringBuilder sb = new StringBuilder();
sb.append(s.substring(s.length() - k, s.length()));
sb.append(s.substring(0, s.length() - k));
System.out.println(sb.toString());
}
}
图2:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int k = sc.nextInt();
String s = sc.next();
int length = s.length();
// 确保旋转次数不超过字符串长度
k = k % length;
// 分割并重新组合字符串
String part1 = s.substring(length - k);
String part2 = s.substring(0, length - k);
System.out.println(part1 + part2);
}
}