541. 反转字符串II
跟之前的反转字符串一样使用双指针,外层循环以2k为单位,并对于最后一段进行长度处理
class Solution {
public String reverseStr(String s, int k) {
char[] str = s.toCharArray();
for (int i = 0; i < str.length; i += 2*k ){
int left = i, right = i+k-1;
if (right > str.length-1) right = str.length-1;
while(left < right) {
char temp = str[left];
str[left] = str[right];
str[right] = temp;
left++ ;
right--;
}
}
return new String(str);
}
}
54. 替换数字
不考虑空间复杂度就是新生题,Java注意StringBuilder才能修改,String在常量池不能改
判断是否为数字用Character.isDigit(s.charAt(i))
如果题目在力扣上输入类型可改变,可以用双指针原地扩容
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
StringBuilder sb = new StringBuilder();
for (int i = 0 ; i < s.length(); i++) {
if (Character.isDigit(s.charAt(i))) {
sb.append("number");
} else {
sb.append(s.charAt(i));
}
}
System.out.println(sb);
}
}
151.翻转字符串里的单词
这里我主要用的Java内置方法
String提供去除首位空格的trim方法和进行分割的split方法,StringBuilder提供reverse方法
中间用到\s+匹配一个或多个空格
class Solution {
public String reverseWords(String s) {
String s0 = s.trim();
String[] arr = s0.split("\\s+");
StringBuilder sb = new StringBuilder();
for (String i : arr) {
StringBuilder rev = new StringBuilder(i);
sb.append(rev.reverse()).append(" ");
}
return sb.reverse().toString().trim();
}
}