代码随想录day07
344.反转字符串
使用双指针的一个思想,让左右两个指针从字符串的两端出发,交换其对应的值,交换完成后,向中间靠拢,直至二者相遇
class Solution {
public void reverseString(char[] s) {
int left=0;
int rigth=s.length-1;
while(left < rigth){
char num = s[left];
s[left] = s[rigth];
s[rigth] = num;
left++;
rigth--;
}
}
}
541.反转字符串II
由于每次操作的字符串长度为2k的前k个字符,故遍历字符串时,以2k的进度遍历
确定操作的子串后进行反转操作
class Solution {
public String reverseStr(String s, int k) {
char[] c = s.toCharArray();
for(int i=0;i<c.length;i += 2*k){
int left = i;
//min(c.lengh-1,left+k-1)
//left+k-1为通过特例推理出的大小关系
//length-1为right最远可移动到数组的右边间
int right =Math.min(c.length-1,left+k-1);
//在前k个字符这个边间内进行字符反转
while(left < right){
char num = c[left];
c[left] = c[right];
c[right] = num;
left++;
right--;
}
}
return new String(c);
}
}
替换数字
不正经解法,随便试了一下居然过了
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
char[] ch = s.toCharArray();
for (int i = 0; i < ch.length; i++){
if (ch[i] >= '0' && ch[i] <= '9'){
System.out.print("number");
}else{
System.out.print(ch[i]);
}
}
}
}
正经解法
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
// 初始化一个空字符串,用于存储处理后的结果
String result = "";
for (int i = 0; i < s.length(); i++) { // 遍历输入字符串的每个字符
char c = s.charAt(i); // 获取当前字符
if (Character.isDigit(c)) { // 判断当前字符是否为数字
result += "number"; // 如果是数字,则将"number"字符串拼接到结果字符串中
} else {
result += c; // 如果不是数字,则将当前字符拼接到结果字符串中
}
}
System.out.println(result);
sc.close();
}
}
151.反转字符串里的单词
使用双指针来寻找单词,然后将单词自后向前放入新字符串中以实现反转的目的
class Solution {
public String reverseWords(String s) {
// 删除首尾空格
s = s.trim();
int j = s.length() - 1
int i = j;
StringBuilder res = new StringBuilder();
while (i >= 0) {
// 搜索首个空格
while (i >= 0 && s.charAt(i) != ' ') i--;
res.append(s.substring(i + 1, j + 1) + " "); // 添加单词
// 跳过单词间空格
while (i >= 0 && s.charAt(i) == ' ') i--;
j = i;
}
return res.toString().trim();
}
}
右旋字符串
import java.util.*;
public class Main{
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String s = sc.next();
StringBuilder res = new StringBuilder();
res.append(s.substring(s.length() - n, s.length()));
res.append(s.substring(0, s.length() - n));
System.out.println(res.toString());
}
}