代码随想录算法训练营第八天 | 字符串

简介: 代码随想录算法训练营第八天 | 字符串

前言

今天开始算法进入字符串专项练习,今日任务:

344. 反转字符串

题目描述

网络异常,图片无法展示
|

思路分析

这个类似于双指针, 两个元素交换

代码展示

public static void reverseString(char[] s) {
    for (int i = 0; i < s.length / 2; i++) {
        char temp = s[i];
        s[i] = s[s.length - i  - 1];
        s[s.length - i  - 1] = temp;
    }
}
复制代码

提交记录

网络异常,图片无法展示
|

541. 反转字符串 II

题目描述

网络异常,图片无法展示
|

思路分析

先对每 2k个数按照要求进行反转, 然后在判断最后几个数要反转的下标, 按要求进行反转

代码展示

public static String reverseStr(String s, int k) {
    char[] chars = s.toCharArray();
    int left = 0, right = 2 * k;
    while(right < s.length()){
        int m = left + k - 1;
        while(left < m){
            char temp = chars[left];
            chars[left++] = chars[m];
            chars[m--] = temp;
        }
        left = right;
        right += 2*k;
    }
    right =  s.length() - left < k ? s.length() - 1: left + k - 1;
    while(left < right){
        char temp = chars[left];
        chars[left++] = chars[right];
        chars[right--] = temp;
    }
    return String.valueOf(chars);
}
复制代码

提交结果

网络异常,图片无法展示
|

剑指 Offer 05. 替换空格

题目描述

网络异常,图片无法展示
|

思路分析

  • 遍历字符串
  • 每个字符串是否为 空格
  • 如果为空格则替换为 %20
  • 使用 StringBuilder,因为要进行多次的字符串修改操作

代码展示

public static String replaceSpace(String s) {
    char[] chars = s.toCharArray();
    StringBuilder str = new StringBuilder();
    for (char aChar : chars) {
        if(aChar == ' '){
            str.append("%20");
        }else{
            str.append(aChar);
        }
    }
    return str.toString();
}
复制代码

提交结果

网络异常,图片无法展示
|

151. 反转字符串中的单词

题目描述

网络异常,图片无法展示
|

思路分析

简单来说就是遍历字符串保存每一个单词,然后倒序输出就可以了

注意事项:

  • 字符串以空格开头
  • 字符串以空格结尾
  • 每两个单词中间存在多个空格

代码展示

public static String reverseWords(String s) {
    StringBuilder str = new StringBuilder();
    char[] chars = s.toCharArray();
    Stack<String> stack = new Stack<>();
    for (char aChar : chars) {
        if (aChar == ' '){
            if (!str.toString().equals("")){
                stack.push(str.toString());
                str = new StringBuilder();
            }
        }else{
            str.append(aChar);
        }
    }
    if (!"".equals(str.toString())){
        stack.push(str.toString());
    }
    str = new StringBuilder();
    while(!stack.isEmpty()){
        str.append(stack.pop());
        str.append(' ');
    }
    return str.deleteCharAt(str.length() - 1).toString();
}
复制代码

提交记录

网络异常,图片无法展示
|

总结

可以看到,这道题每一次都会出现错误,每一次都是在细节的问题上,希望有一天做题能够考虑的更加周到

剑指 Offer 58 - II. 左旋转字符串

题目描述

网络异常,图片无法展示
|

思路分析

还是遍历字符串,根据 n来当做分界值,先遍历 >=n的值,在遍历 <n的值

【代码展示】中分别是上次提交和本次提交的代码, 咱也不知道为啥上次写的那么麻烦, 但是确实是执行用时会少一点,毕竟是在同一个字符串内进行操作,但是代码量会多很多,内存消耗差不多

代码展示

上次代码

public String reverseLeftWords(String s, int n) {
    char[] chars = s.toCharArray();
    int length = chars.length;
    int t = n;
    for (int i = 0; i <  n; i++) {
        n--;
        char temp = chars[i];
        chars[i] = chars[n];
        chars[n] = temp;
    }
    for (int i = t; i < length; i++) {
        char temp = chars[i];
        chars[i] = chars[length - 1];
        chars[length - 1] = temp;
        length--;
    }
    length = chars.length;
    for (int i = 0; i < length; i++) {
        char temp = chars[i];
        chars[i] = chars[length - 1];
        chars[length - 1] = temp;
        length--;
    }
    return String.valueOf(chars);
}
复制代码

本次代码

public static String reverseLeftWords(String s, int n) {
    char[] chars = s.toCharArray();
    StringBuilder str = new StringBuilder();
    for (int i = n; i < chars.length; i++) {
        str.append(chars[i]);
    }
    for (int i = 0; i < n; i++) {
        str.append(chars[i]);
    }
    return str.toString();
}
复制代码

提交结果

网络异常,图片无法展示
|

总结

字符串专项练习截止到目前依旧是拿捏,根据目前的练习,字符串方面主要还是以遍历为主,依托于遍历来进行的各种其他操作


目录
相关文章
|
6天前
|
算法
【算法】滑动窗口——找到字符串中所有字母异位词
【算法】滑动窗口——找到字符串中所有字母异位词
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】TF-IDF算法在人工智能方面的应用,附带代码
TF-IDF算法在人工智能领域,特别是自然语言处理(NLP)和信息检索中,被广泛用于特征提取和文本表示。以下是一个使用Python的scikit-learn库实现TF-IDF算法的简单示例,并展示如何将其应用于文本数据。
116 65
|
2天前
|
机器学习/深度学习 人工智能 算法
【人工智能】传统语音识别算法概述,应用场景,项目实践及案例分析,附带代码示例
传统语音识别算法是将语音信号转化为文本形式的技术,它主要基于模式识别理论和数学统计学方法。以下是传统语音识别算法的基本概述
11 2
|
4天前
|
算法 Java
掌握算法学习之字符串经典用法
文章总结了字符串在算法领域的经典用法,特别是通过双指针法来实现字符串的反转操作,并提供了LeetCode上相关题目的Java代码实现,强调了掌握这些技巧对于提升算法思维的重要性。
|
7天前
|
搜索推荐 算法 Java
|
6天前
|
搜索推荐 算法 Java
插入排序算法(Java代码实现)
这篇文章通过Java代码示例详细解释了插入排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过插入排序对数组进行升序排列。
|
6天前
|
算法
基于模糊控制算法的倒立摆控制系统matlab仿真
本项目构建了一个基于模糊控制算法的倒立摆控制系统,利用MATLAB 2022a实现了从不稳定到稳定状态的转变,并输出了相应的动画和收敛过程。模糊控制器通过对小车位置与摆的角度误差及其变化量进行模糊化处理,依据预设的模糊规则库进行模糊推理并最终去模糊化为精确的控制量,成功地使倒立摆维持在直立位置。该方法无需精确数学模型,适用于处理系统的非线性和不确定性。
基于模糊控制算法的倒立摆控制系统matlab仿真
|
1天前
|
算法 数据安全/隐私保护
基于LS算法的OFDM+QPSK系统信道估计均衡matlab性能仿真
基于MATLAB 2022a的仿真展示了OFDM+QPSK系统中最小二乘(LS)算法的信道估计与均衡效果。OFDM利用多个低速率子载波提高频谱效率,通过循环前缀克服多径衰落。LS算法依据导频符号估计信道参数,进而设计均衡器以恢复数据符号。核心程序实现了OFDM信号处理流程,包括加性高斯白噪声的加入、保护间隔去除、快速傅立叶变换及信道估计与均衡等步骤,并最终计算误码率,验证了算法的有效性。
9 2
|
1天前
|
算法
基于GA-PSO遗传粒子群混合优化算法的CVRP问题求解matlab仿真
本文介绍了一种基于GA-PSO混合优化算法求解带容量限制的车辆路径问题(CVRP)的方法。在MATLAB2022a环境下运行,通过遗传算法的全局搜索与粒子群算法的局部优化能力互补,高效寻找最优解。程序采用自然数编码策略,通过选择、交叉、变异操作及粒子速度和位置更新,不断迭代直至满足终止条件,旨在最小化总行驶距离的同时满足客户需求和车辆载重限制。
|
6天前
|
机器学习/深度学习 算法 定位技术
MATLAB - 遗传算法(GA)求解旅行商问题(TSP)
MATLAB - 遗传算法(GA)求解旅行商问题(TSP)
13 3

热门文章

最新文章