代码随想录算法训练营第8天|反转字符串I和II、替换数字
lc344反转字符串
思路
双指针左右开弓法
代码
class Solution {
public void reverseString(char[] s) {
int left = 0, right = s.length-1;
while (left < right){
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
}
lc541反转字符串II
思路
循环中步长改为2k,每一次循环只翻转从起始位置起的k个字符,注意结束位置超出字符末尾的情况
代码
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替换数字
思路
对于线性数据结构,填充或者删除,后序处理会高效的多
代码
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);
}
}
腾讯云智研发成长空间 216人发布