344. 反转字符串
题目链接:344. 反转字符串 - 力扣(LeetCode)
解题思路:
因为输入是以数组的形式,所以可以使用两个指针,分别指向数组头和数组尾,然后交换元素,直到两个指针相遇。
class Solution {
public void reverseString(char[] s) {
int len = s.length;
int left = 0;
int right = len - 1;
if (len == 0 || len == 1) return ;
while (left < right) {
char c = s[left];
s[left] = s[right];
s[right] = c;
left ++;
right --;
}
}
}
如果库函数的使用解决的只是题解的一部分,非核心,那么可以使用库函数。
541. 反转字符串II
题目链接:541. 反转字符串 II - 力扣(LeetCode)
解题思路:
先提供一个反转方法reverse,用于反转一部分字符串,然后主要是确定反转的起始位置和终止位置。起始位置:循环中的i,终止位置:当剩余的字符串长度小于k时,终止位置为字符串长度len - 1,其他情况(剩余字符串长度大于2k、剩余字符串长度大于k小于2k)一律将终止位置设置为i + k - 1。
class Solution {
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
int len = s.length();
int count = 0;
for (int i = 0; i < len; i += 2 * k) {
if (i + k <= len) {
reverse(ch, i, i + k - 1);
continue;
}
reverse(ch, i, len - 1);
}
return new String(ch);
}
public void reverse(char[] ch, int start, int end) {
for (; start < end; start ++, end --) {
char temp = ch[start];
ch[start] = ch[end];
ch[end] = temp;
}
}
}
卡码网:54.替换数字
题目链接:54. 替换数字(第八期模拟笔试) (kamacoder.com)
for循环遍历字符串,遇到字母就替换为number,但是问题在于,如何将number拼接上去。
牛逼,先扩展字符数组char[]的长度,然后从后向前,先将数字后的字符填充进去,再将number按照倒序的方式填充进去。(注意这是字符串填充类的问题常用的方法!)又是一道双指针的题目。
import java.util.*;
public class Main {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
System.out.println(char2number(s));
}
public static char[] char2number (String s) {
char[] ch = s.toCharArray();
int count = 0;
for (int i = 0; i < ch.length; i++) {
if (ch[i] - 'a' < 26 && ch[i] - 'a' >= 0) {
continue;
}
count++;
}
char[] rCh = new char[ch.length + 5 * count];
for (int i = 0; i < ch.length; i++) {
rCh[i] = ch[i];
}
for (int i = ch.length - 1, j = rCh.length - 1; i >= 0; i--) {
if ( rCh[i] <= '9' && rCh[i] >= '0') {
rCh[j--] = 'r';
rCh[j--] = 'e';
rCh[j--] = 'b';
rCh[j--] = 'm';
rCh[j--] = 'u';
rCh[j--] = 'n';
}else {
rCh[j--] = rCh[i];
}
}
return rCh;
}
}
day8 完结撒花~