344反转字符串
原地翻转输入字符数组
双指针,从两边向中间移动,交换指针指向的数组值
class Solution {
public void reverseString(char[] s) {
int i = 0;
int j = s.length-1;
while (i<j){
char temp = s[i];
s[i] = s[j];
s[j] = temp;
i++;
j--;
}
}
}
541反转字符串II
每计数至 2k
个字符,就反转这 2k
字符中的前 k
个字符
使用count用于标记需要判断的字符首位,使用i,j指针用于标记翻转字符串的首尾位。
class Solution {
public String reverseStr(String s, int k) {
if (s.length()==0||s.length()==1){
return s;
}
char[] chars = s.toCharArray();
int count = 0;
while (count < chars.length){
int l = count;
int r = count + k - 1;
if (count + k - 1< chars.length){
r = count + k - 1;
}else {
r = chars.length - 1;
}
reverseLimStr(chars, l, r);
count = count + 2 * k;
}
return new String(chars);
}
public void reverseLimStr(char[] s, int l, int r) {
int i = l;
int j = r;
while (i<j){
char temp = s[i];
s[i] = s[j];
s[j] = temp;
i++;
j--;
}
}
}
卡码网54替换数字
给定一个字符串 s,它包含小写字母和数字字符,编写函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。
使用flag数组标记数字字符的下标
import java.util.*;
public class Main{
public static int[] replacenumber(char[] chars) {
int [] flags = new int[chars.length];
for (int i = 0; i < chars.length; i++) {
if (chars[i] - 'a' >= 26 || chars[i] - 'a' < 0){
flags[i] = 1;
}
}
return flags;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
StringBuilder result = new StringBuilder();
char[] chars= s.toCharArray();
int[] flag = replacenumber(chars);
for (int i = 0; i < chars.length; i++) {
if (flag[i] == 0){
result.append(chars[i]);
}else {
result.append("number");
}
}
System.out.println(result);
}
}
151翻转字符串里的单词
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串
使用指针从后往前找,找到非空格的字符,再内部循环直到找到单词首位,将单词插入新字符中
class Solution {
public String reverseWords(String s) {
StringBuilder result1 = new StringBuilder();
boolean flag = false;
for (int i = s.length()-1; i >=0; i--) {
if (s.charAt(i)!=' '){
if (flag){
result1.append(" ");
}
int r = i;
while (i>=0 && s.charAt(i)!=' '){
i--;
}
i++;
result1.append(s, i, r+1);
flag = true;
}
}
String result = result1.toString();
return result;
}
}
收获
使用指针用于解决字符串操作很有效
在java中字符串不能直接更改,可以使用s.toCharArray()
将字符串转换为字符数组,也可以使用StringBuilder类型进行修改。