344.反转字符串 leetcode.com/problems/re…
思路:这道题就比较简单了,典型的双指针,然后按个交换就行了
class Solution {
public void reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
while (left < right) {
swap(left,right, s);
left++;
right--;
}
}
private void swap(int left, int right, char[] s) {
char tmp = s[left];
s[left] = s[right];
s[right] = tmp;
}
}
- 反转字符串II leetcode.com/problems/re…
class Solution {
public String reverseStr(String s, int k) {
char[] c = s.toCharArray();
// 1. 每隔 2k 个字符的前 k 个字符进行反转
for (int i = 0; i< c.length; i += 2 * k) {
// 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
if (i + k <= c.length) {
reverse(c, i, i + k -1);
continue;
}
// 3. 剩余字符少于 k 个,则将剩余字符全部反转
reverse(c, i, c.length - 1);
}
return new String(c);
}
public void reverse(char[] c, int i, int j) {
for (; i < j; i++, j--) {
char temp = c[i];
c[i] = c[j];
c[j] = temp;
}
}
}
替换数字 kamacoder.com/problempage…
思路:遍历字符串寻找数字的数量,扩充字符串的长度为数字替换为number之后的长度,定义两个指针,一个指向原来字符串的末尾,一个指向新长度字符串的末尾,然后按个替换
// 为了还原题目本意,先把原数组复制到扩展长度后的新数组,然后不再使用原数组、原地对新数组进行操作。
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);
}
}