字符串
344.反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须**原地修改输入数组**、使用 O(1) 的额外空间解决这一问题。
思路: 双指针
代码:
class Solution {
public void reverseString(char[] s) {
// 双指针
int l = 0,r = s.length - 1;
while(l < r) {
char t = s[l];
s[l] = s[r];
s[r] = t;
l++;
r--;
}
}
}
- 时间复杂度: O(n)
- 空间复杂度: O(1)
541.反转字符串 II
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
- 如果剩余字符少于
k个,则将剩余字符全部反转。 - 如果剩余字符小于
2k但大于或等于k个,则反转前k个字符,其余字符保持原样。
思路: 步长为2k进行循环, 每次循环内对: 2k的前k个 或 不足2k的剩余所有, 进行反转
代码:
class Solution {
public String reverseStr(String s, int k) {
char[] str = s.toCharArray();
// 1. 2k 2k 循环遍历
for(int i = 0;i < str.length;i += 2*k) {
// 2. 找2k的前k个 或 不足2k的剩余所有 进行反转
int start = i;
int end = Math.min(str.length - 1,start + k - 1);
while(start < end) {
char t = str[start];
str[start] = str[end];
str[end] = t;
start++;
end--;
}
}
// 3. 反转
return new String(str);
}
}
54.替换数字

思路: 双指针, 先计算新数组的大小, 将原数组复制到新数组后, 从后往前开始替换
代码:
import java.util.*;
public class Main{
public static void main (String[] args) {
// 1. 输入
Scanner sc = new Scanner(System.in);
String s = sc.next();
char[] oStr = s.toCharArray();
// 2. 计算新数组的长度
int olen = oStr.length;
int nlen = olen;
for(int i = 0;i < olen;i++) {
if(oStr[i] >= '0' && oStr[i] <= '9') {
nlen += 5;// number共6位, 覆盖原来字母一位, 每次还需再加5位
}
}
// 3. 将原数组的内容copy到新数组
char[] nStr = new char[nlen];
for(int i = 0;i < olen;i++) {
nStr

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



