代码随想录算法训练营DAY8 | 字符串(1)

一、LeetCode 344 反转字符串

题目链接: 344.反转字符串https://leetcode.cn/problems/reverse-string/

思路:双指针法交换。

java 复制代码
class Solution {
    public void reverseString(char[] s) {
        int n = s.length;
        int left = 0, right = n-1;
        while(left < right){
            char temp = s[left];
            s[left] = s[right];
            s[right] = temp;
            left++;
            right--;
        }
    }
}

二、LeetCode 541 反转字符串II

题目链接:541.反转字符串IIhttps://leetcode.cn/problems/reverse-string-ii/

思路:双指针按块反转。

java 复制代码
class Solution {
    public String reverseStr(String s, int k) {
        char[] cs = s.toCharArray();
        int n = cs.length;
        int left = 0, right = 0;
        while(n >= 2*k){
            right = left+k-1;
            reverse(cs,left,right);
            n -= 2*k;
            left = left + 2*k;
        }
        if(n >= k){
            right = left+k-1;
            reverse(cs,left,right);
        }else{
            reverse(cs,left,cs.length-1);
        }
        return new String(cs);
    }
    public void reverse(char[] cs, int left, int right){
        while(left < right){
            char temp = cs[left];
            cs[left] = cs[right];
            cs[right] = temp;
            left++;
            right--;
        }
    }
}

三、卡码网 54 替换数字

题目链接:54.替换数字https://kamacoder.com/problempage.php?pid=1064

思路:使用StringBuilder类的append方法,遍历字符串得到答案。

java 复制代码
import java.util.*;
import java.lang.*;
public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){
                sb.append("number");
            }else{
                sb.append(s.charAt(i));
            }
        }
        System.out.print(sb.toString());
    }
}

四、LeetCode 151 反转字符串中的单词

题目链接:151.反转字符串中的单词https://leetcode.cn/problems/reverse-words-in-a-string/

思路:先去除首尾空格,再把字符串中的单词都存储到ArrayList中,最后倒序输出到Stringbuilder中,得到最终结果。

java 复制代码
class Solution {
    public String reverseWords(String s) {
        List<String> list = new ArrayList<>();
        String ss = s.trim();
        char[] cs = ss.toCharArray();
        int left = 0;
        for(int i = 0; i < cs.length; i++){
            if(cs[i] == ' '){
                list.add(ss.substring(left,i));
                while(cs[i] == ' '){
                    i++;
                }
                left = i;
            }
        }
        list.add(ss.substring(left,cs.length));
        StringBuilder sb = new StringBuilder();
        for(int i = list.size()-1; i >= 0; i--){
            sb.append(list.get(i));
            sb.append(" ");
        }
        return sb.toString().trim();
    }
}

五、卡码网 55 右旋转字符串

题目链接: 55.右旋转字符串

思路:先让k进行对n的求余,再截取后k个字符为子串1,剩余字符为子串2,创建StringBuilder把子串1和子串2合成可得出答案。

java 复制代码
import java.util.*;
import java.lang.*;
public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        String s = sc.next();
        int n = s.length();
        k = k%n;
        String s1 = s.substring(n-k,n);
        String s2 = s.substring(0,n-k);
        StringBuilder sb = new StringBuilder();
        sb.append(s1);
        sb.append(s2);
        System.out.print(sb.toString());
    }
}

六、今日小结

重学Java String的各种方法,有一种"温故而知新"的感觉;题目不是很难,回顾了很多字符串处理的方法和思想;明天继续加油*ovo!

相关推荐
懒羊羊不懒@19 小时前
JavaSe—Stream流☆
java·开发语言·数据结构
不当菜鸡的程序媛20 小时前
Flow Matching|什么是“预测速度场 vt=ε−x”?
人工智能·算法·机器学习
sali-tec21 小时前
C# 基于halcon的视觉工作流-章58-输出点云图
开发语言·人工智能·算法·计算机视觉·c#
_OP_CHEN21 小时前
算法基础篇:(四)基础算法之前缀和
c++·算法·前缀和·蓝桥杯·acm·icpc·算法竞赛
_OP_CHEN21 小时前
算法基础篇:(五)基础算法之差分——以“空间”换“时间”
c++·算法·acm·icpc·算法竞赛·差分算法·差分与前缀和
DuHz21 小时前
霍夫变换和基于时频脊线的汽车FMCW雷达干扰抑制——论文阅读
论文阅读·物联网·算法·汽车·信息与通信·毫米波雷达
秋风&萧瑟21 小时前
【C++】智能指针介绍
java·c++·算法
QiZhang | UESTC21 小时前
JAVA算法练习题day67
java·python·学习·算法·leetcode
工一木子21 小时前
从 LinkedList 血案说起:用 3W 法搭建数据结构知识框架
数据结构
陌路2021 小时前
S15 排序算法--归并排序
数据结构·算法·排序算法