day08|字符串题目part01

news2024/9/22 7:24:01
相关题目:

● 344.反转字符串
● 541. 反转字符串II
● 卡码网:54.替换数字
● 151.翻转字符串里的单词
● 卡码网:55.右旋转字符串

344.反转字符串—双指针的应用

力扣链接
思路:创建两个指针分别指向头部和尾部,首尾交换后依次往里移动在进行交换,直到两个指针相遇或擦身而过为止
实现过程:

public static void reverseString(char[] s) {
        if(s == null ||s.length ==1)return;
        int left = 0;
        int right = s.length-1;
        while(left<right){
            char temp = s[left];
            s[left] = s[right];
            s[right] = temp;
            left++;
            right--;
        }
    }

541. 反转字符串II—反转进阶版

力扣链接
给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

难点
  1. 遍历指针的步长定义为多少
  2. 如何出处理剩余字符长度不足2k或不足k的情况
实现过程
public static String reverseStr(String s, int k) {
        if (s.length() == 0 || k == 1) {
            return s;
        }
        char[] cs = s.toCharArray();
        //i以2k的速度往前走
        for (int i = 0; i < cs.length; i += 2 * k) {
        //剩余长度大于k,反转前k个字符
            if (cs.length - i >= k) {
                //反转前k个字符
                reverse(cs, i, i + k - 1);
               //剩余字符小于k时,将剩余字符全部反转
            } else if (cs.length - i < k) {
                reverse(cs, i, cs.length - 1);
            }
        }
        return new String(cs);
    }

    public static void reverse(char[] chars, int start, int end) {
        int left = start;
        int right = end;
        while(left<right) {
            char temp = chars[left];
            chars[left] = chars[right];
            chars[right] = temp;
            left++;
            right--;
        }
    }

卡码网:54.替换数字—String类型数据的更新

难点

如何判断字符为数字
解决方法:判断chars[i] -’0‘是否为0或91或介于0-9之间

实现过程

public static String replaceNumber(String str,String replace){
        StringBuffer res = new StringBuffer();
        char[] cs = str.toCharArray();
        for (int i = 0; i < cs.length; i++) {
            if(cs[i]-'0'>= 0 && cs[i]-'0'<=9){
                res.append(replace);
            }
            else{
                res.append(cs[i]);
            }
        }
        return res.toString();
    }

151.翻转字符串里的单词—去除多余空格是难点

按照卡哥的思路解决的难点:

  1. 如何去除多余空格,难度系数:5*
  2. 为何会使用多次反转达到反转单词顺序的目的

实现过程

 //反转符串中 单词 的顺序,并去除字符串中多余的空格
//    public static String reverseWords(String s) {
//        char[] cs = s.toCharArray();
//        //1.去掉多余空格,使用双指针完成
//        //2.反正整个字符串
//        //3.反转每个单词
//    }

1.去掉多余空格,使用双指针完成

    public static String removeExtraSpaces(String str) {
        int fast = 0;
        int slow = 0;
        char[] cs = str.toCharArray();
        StringBuffer stringB = new StringBuffer();
        for (; fast < cs.length; fast++) {
            //给每个单词之间加空格,并第一个单词前不加空格
            if (slow != 0 && cs[fast] != ' ') {
                cs[slow++] = ' ';
            }
            //不是空格的直接赋给慢指针
            while (fast < cs.length && cs[fast] != ' ') {
                cs[slow++] = cs[fast++];
            }
        }
        for (int i = 0; i < slow; i++) {
            stringB.append(cs[i]);
        }
        return stringB.toString();
    }
  1. 反转整个字符串
 public static String reverseString(String str) {
      char[] chars = reverse(str.toCharArray(), 0, str.length() - 1);
      return new String(chars);
 }
  1. 反转每个单词
public static String reverseWord(String str){
      char[] chars = str.toCharArray();
      int start = 0;
      for (int i = 0; i <= chars.length; i++) {
          if ( i == chars.length||chars[i] == ' ') {
              reverse(chars, start, i - 1);
              start = i + 1;
          }
      }
      return new String(chars);
  }

反转算法:

    public static char[] reverse(char[] chars, int start, int end) {
        int left = start;
        int right = end;
        while (left < right) {
            char temp = chars[left];
            chars[left] = chars[right];
            chars[right] = temp;
            left++;
            right--;
        }
        return chars;
    }

卡码网:55.右旋转字符串—反转字符串的应用

右旋转字符串

  1. 先整体反转
  2. 前一段反转:长度为n
  3. 后一段反转:长度为len-n

左旋转字符串

  1. 前一段反转:长度为len-n
  2. 后一段反转:长度为n
  3. 整体反转

实现过程

右旋转字符串

 public static String rightRotate(String str,int n){
        char[] chars = str.toCharArray();
        //反转整个字符串
        reverse(chars,0,chars.length-1);
        //反转前一段,长度为n
        reverse(chars,0,n-1);
        //反转后一段,长度为len-n
        reverse(chars,n,chars.length-1);
        return new String(chars);
    }
    public static void reverse(char[] chars,int start,int end){
        int left = start;
        int right = end;
       while(left<right){
           char temp = chars[left];
           chars[left] = chars[right];
           chars[right] = temp;
           left++;
           right--;
       }
    }

左旋转字符串

 public static String rightRotate(String str,int n){
        char[] chars = str.toCharArray();
        
        //反转前一段,长度为len-n
        reverse(chars,0,len-n-1);
        //反转后一段,长度为n
        reverse(chars,len-n,chars.length-1);
        //反转整个字符串
        reverse(chars,0,chars.length-1);
        return new String(chars);
 }
 public static void reverse(char[] chars,int start,int end){
        int left = start;
        int right = end;
       while(left<right){
           char temp = chars[left];
           chars[left] = chars[right];
           chars[right] = temp;
           left++;
           right--;
       }
}

总结:

字符串交换题目:双指针进行交换,
交换的进阶版:首先看多次交换是否可以得到结果
其中有些题目需要移除某些元素:可借助数组章节的leecode—移除元素一题的思想进行解决
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1679928.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IP代理中的SOCKS5代理是什么?安全吗?

在互联网世界中&#xff0c;网络安全和个人隐私保护变得日益重要。SOCKS5代理作为一种安全高效的网络工具&#xff0c;不仅可以保护个人隐私安全&#xff0c;还可以提供更稳定、更快度的网络连接。本文将带大家深入了解SOCKS5代理在网络安全领域中的应用。 什么是SOCKS5代理 …

vue3.0+antdv的admin管理系统vue-admin-beautiful推荐

前言 几年前&#xff0c;笔者自学了vue这一优秀的前端框架&#xff0c;但苦于没项目练手&#xff0c;无意间发现了vue-admin-beautiful这一优秀的前端集成框架。当时就使用它做了一很有意思的小项目---终端监控云平台&#xff0c;实现了前端和后台的整体功能。整体方案介绍参见…

python:SunMoonTimeCalculator

# encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看&#xff1a; # 描述&#xff1a; https://github.com/Broham/suncalcPy # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 3.11 # Datetime : 2024/5/14 21:59 # User …

在抖音做电商,没有货源,不懂直播怎么办?分享一种解决方案!

大家好&#xff0c;我是电商糖果 糖果做电商的时间也挺久了&#xff0c;天猫&#xff0c;京东&#xff0c;闲鱼都搞过。 从学校进入社会工作&#xff0c;创业&#xff0c;一直都是围绕电商打转。 做的时间久了&#xff0c;好像只会做这一件事儿了。 2020年开始专攻抖音小店&…

大模型日报2024-05-15

大模型日报 2024-05-15 大模型资讯 OpenAI推出全新AI模型GPT-4o&#xff0c;具备文本、图像和音频处理能力 摘要: OpenAI公司继ChatGPT后&#xff0c;最新推出了名为GPT-4o的AI模型。这一模型不仅能够理解和生成文本&#xff0c;还新增了图像和音频的解释及生成功能。GPT-4o作为…

思科模拟器--2.静态路由和默认路由配置24.5.15

首先&#xff0c;创建三个路由器和两个个人电脑。 接着&#xff0c;配置两台电脑的IP&#xff0c;子网掩码和默认网关 对Router 0&#xff0c;进行以下命令&#xff1a; 对Router进行以下命令&#xff1a; 对Router2进行以下命令&#xff1a; 本实验完成。 验证&#xff1a;PC…

代码随想录训练营Day 29|力扣39. 组合总和、40.组合总和II、131.分割回文串

1.组合总和 题目链接/文章讲解&#xff1a; 代码随想录 视频讲解&#xff1a;带你学透回溯算法-组合总和&#xff08;对应「leetcode」力扣题目&#xff1a;39.组合总和&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩_bilibili 代码&#xff1a;&#xff08;未剪枝版 &#xf…

React Native 之 原生组件和核心组件(二)

原生组件 在 Android 开发中是使用 Kotlin 或 Java 来编写视图&#xff1b;在 iOS 开发中是使用 Swift 或 Objective-C 来编写视图。在 React Native 中&#xff0c;则使用 React 组件通过 JavaScript 来调用这些视图。在运行时&#xff0c;React Native 为这些组件创建相应的 …

19个测试⽤例⽣成的AI⼯具!卷起来!

在不断发展的软件开发领域中&#xff0c;确保应⽤程序的可靠性和功能性⾄关重要。 随着软件系统复杂性的增加&#xff0c;有效测试⽅法的需求也在上升。 传统的测试⽤例⽣成⽅法通常⽆法满⾜快速开发周期和复杂代码库的需求。 随着进⼊⼈⼯智能&#xff08;AI&#xff09;时…

ROS学习笔记(15)小车巡墙驾驶

0.前提 前一章我讲解了拉氏变换和PID&#xff0c;这一章我来讲解一下小车巡墙驾驶的理论和部分代码。 1.前情回顾 1.拉氏变换 拉普拉斯变换是要将时域问题转换成频域问题来处理。 2.PID控制器 转向角&#xff1a; 误差牺牲&#xff1a; 3.具体参看上一篇文章 2.巡墙驾驶…

机器学习入门介绍

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 目录 三大方向机器学习产生的原因机器如何学习…

Vue3学习笔记 - 禹神YYDS

1. 教程介绍 https://www.bilibili.com/video/BV1Za4y1r7KE?p1 本篇vue3&#xff0c;内容比较新&#xff0c;比如有setup语法糖用法&#xff1b;只是他使用TS&#xff0c;并不是JS&#xff1b;不过JS也比较熟悉了&#xff0c;也可以学习下TS的语法&#xff0c;课程使用 TypeSc…

【利用数组处理批量数据-谭浩强配套】(适合专升本、考研)

无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 完整资料如下&#xff1a;纯干货、纯干货、纯干货&#xff01;&#xff01;…

再谈毕业论文设计投机取巧之IVR自动语音服务系统设计(信息与通信工程专业A+其实不难)

目录 举个IVR例子格局打开&#xff0c;万物皆能IVR - 把《民法典》搬上IVR IVR系统其实可盐可甜。还能可圈可点。 戎马一生&#xff0c;归来依然IVR。 举个IVR例子 以下是IVR系统的一个例子。 当您拨打电话进入IVR系统。 首先检验是否为工作时间。 如是&#xff0c;您将被送入…

STM32F407 2个高级定时器生成2路无刷电机波形以及相电流采集程序(寄存器版)

stm32f407 高级定时1、定时8 生成20k 中心PWM 波形 并分别用其通道4 触发ADC1 ADC2 采样 用于分别两无刷电机foc 电流环控制&#xff0c;ADC1产生50us的电流采集完成中断&#xff0c;用于foc算法周期运算 主要参考高级定时器的寄存器和ADC寄存器 首先&#xff0c;要使用STM32F…

OSG编程指南<二十三>:基于OSG+ImGui制作模型编辑器,实现三轴方向的实时平移、旋转和缩放变化

1、概述 在OSG的开发应用过程中&#xff0c;我们有时候总会纠结于使用MFC还是Qt来嵌入OSG窗口以便于后续的功能开发&#xff0c;毕竟选择一个合适的UI框架&#xff0c;对于后续的开发还是省去很多麻烦的。但对于初学者来说&#xff0c;可能对框架消息机制的不熟悉&#xff0c;尤…

每日复盘-20240515

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 国联证券 (1)|[9:25]|[133765万]|31.12 一…

selenium发展史

Selenium Core 2004 年&#xff0c;Thoughtworks 的工程师 Jason Huggins 正在负责一个 Web 应用的测试工作&#xff0c;由于这个项目需要频繁回归&#xff0c;这导致他不得不每天做着重复且低效的工作。为了解决这个困境&#xff0c;Jason 开发了一个运行在 JavaScript 沙箱中…

表白成功率百分百的向女朋友表白网页源代码,向女友表白HTML源代码

表白成功率百分百的向女朋友表白网页源代码&#xff0c;向女友表白HTML源代码 效果&#xff1a; 完整代码下载地址&#xff1a;向女友表白HTML源代码 <!DOCTYPE html> <!--STATUS OK--> <html><head><meta http-equiv"Content-Type" c…

Linux|基础环境开发工具使用(1)

目录 Linux 软件包管理器 yum 什么是软件包 关于 rzsz 注意事项 查看软件包 如何安装软件 如何卸载软件 Linux编辑器-vim介绍 vi与vim的相同点 vi与vim区别 Linux 软件包管理器 yum 什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译…