day08|字符串题目part01

相关题目:

● 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—移除元素一题的思想进行解决
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE进阶】 Bean的作用域与生命周期

文章目录 &#x1f343;Bean的作用域&#x1f6a9;作用域的使用&#x1f6a9;观察Bean的作用域&#x1f388;单例作用域&#x1f388;多例作用域&#x1f388;请求作用域&#x1f388;会话作⽤域&#x1f388;Application作⽤域 &#x1f384;Bean的⽣命周期⭕总结 &#x1f34…

Linux 第三十三章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

rocketmq的存储和检索

messageId是rocketmq自动生成的。

JSP+SQL学生成绩管理系统

Java版本&#xff1a;1.8 数据库&#xff1a;MySQL 框架&#xff1a;Spring Spring MVC MyBatis 服务器&#xff1a;Tomcat 前端解析框架&#xff1a;Thymeleaf 开发工具&#xff1a;Idea 2017 版本管理工具&#xff1a;Maven 版本控制工具&#xff1a;GitHub 经过对系统的需…

国际化日期(inti)

我们可以使用国际化API自动的格式化数字或者日期&#xff0c;并且格式化日期或数字的时候是按照各个国家的习惯来进行格式化的&#xff0c;非常的简单&#xff1b; const now new Date(); labelDate.textContent new Intl.DateTimeFormat(zh-CN).format(now);比如说这是按照…

link.click()时浏览器报错The file at ‘data:image/png;base64,iVBORw

代码如下&#xff1a; const dataURL canvas.toDataURL({format: "png",width: 400,height: 400, });const link document.createElement("a"); link.download new Date().getTime();link.href dataURL; document.body.appendChild(link); link.click…

【考研数学】准备开强化,更「张宇」还是「武忠祥」?

数一125学长前来回答&#xff0c;选择哪位老师的课程&#xff0c;这通常取决于你的个人偏好和学习风格&#xff01; 张宇老师和武忠祥老师都是非常有经验的数学老师&#xff0c;他们的教学方法各有特点。 张宇老师的教学风格通常被认为是通俗易懂&#xff0c;善于将复杂的概念…

x264 帧类型代价计算原理:slicetype_mb_cost 函数分析

slicetype_mb_cost 函数 函数功能 计算每个宏块 MB 的代价 cost。函数参数分析 x264_t *h:全局编码结构体x264_mb_analysis_t *a:宏块分析结构体x264_frame_t **frames:系列帧数据结构体int p0:帧序号之一,一般指向靠前帧int p1:帧序号之一,一般指向靠后帧int b:帧标志…

《系统架构设计师教程(第2版)》第4章-信息安全技术基础知识-02-信息加密技术

文章目录 1. 信息加密技术1.1 数据加密1.2 对称密钥加密算法1&#xff09;数据加密标准&#xff08;DES)2&#xff09;三重DES&#xff08;Triple-DES&#xff09;3&#xff09;国际数据加密算法&#xff08;IDEA&#xff09;4&#xff09;高级加密标准&#xff08;AES&#xf…

【C -> Cpp】由C迈向Cpp (6):静态、友元和内部类

标题&#xff1a;【C -&#xff1e; Cpp】由C迈向Cpp &#xff08;6&#xff09;&#xff1a;静态、友元和内部类 水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 &#xff08;一&#xff09;静态成员 &#xff08;二&#xff09;友元 &#xff08;三&#xff09…

Zynq UltraScale+ RFSoC 配置存储器器件

Zynq UltraScale RFSoC 配置存储器器件 下表所示闪存器件支持通过 Vivado 软件对 Zynq UltraScale RFSoC 器件执行擦除、空白检查、编程和验证等配置操 作。 本附录中的表格所列赛灵思系列非易失性存储器将不断保持更新 &#xff0c; 并支持通过 Vivado 软件对其中所列…

扭亏为盈的赛力斯,真正进入稳态了吗?

“72小时内大定破1万台”。5月15日&#xff0c;问界新M5开启全国大规模交付&#xff0c;从当前取得的成绩来看&#xff0c;赛力斯的“富贵”似乎还将延续。 其实&#xff0c;此前基于问界新M7等车型的爆火&#xff0c;赛力斯已经找到了创收轨道。财报显示&#xff0c;2024年一…

无代码无国界:我们正在走向软件安全的狂野西部吗?

我们使用的几乎所有东西都是基于代码构建的&#xff0c;从汽车到智能冰箱再到门铃。在企业中&#xff0c;无数的应用程序保持设备、工作流程和操作的运行。因此&#xff0c;当早期的无代码开发平台于 2010 年推出时&#xff0c;承诺为公民开发人员提供更易于访问的应用程序开发…

用友GRP-U8 bx_dj_check.jsp SQL注入漏洞复现(XVE-2024-10537)

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

【2024华为HCIP831 | 高级网络工程师之路】刷题日记(18)

个人名片&#xff1a;&#x1faaa; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&a…

动态手势识别(VGG11)

学校的大作业要做一个视频图像处理相关的&#xff0c;就做了动态手势识别 VGG代码 import torch import torch.nn as nnclass VGG_11_3D(nn.Module):def __init__(self, num_classes, pretrainedFalse):super(VGG_11_3D, self).__init__()self.conv1 nn.Conv3d(3, 64, kernel…

labelimg删除用不到的标签(yolo格式)以及 下载使用

问题&#xff1a;当我们标注完成新的类别后后直接删除classes.txt中不需要的类别之后再次打开labelimg会闪退&#xff0c;如何删除不需要的标签并且能够正确运行呢&#xff1f;&#xff08;yolo格式&#xff09; 原因&#xff1a;当我们打开labelimg进行标注的时候&#xff0c…

JumpServer堡垒机简单式部署与管理(v3.10.8) 上

目录 一. 环境准备 1.1 关闭防火墙 1.2 永久关闭SEliunx 1.3 重启虚拟机让seliunx文件生效 1.4 配置阿里源镜像 二. 安装部署 2.1 上传压缩包到虚拟机&#xff08;v3.10.8&#xff09; 2.2 解压 2.3 一键安装部署 2.4 安装完成界面 2.5 启动 2.6 浏览器访问IP 2.7 使…

“图生视频”技术创新:剪贴画秒变动画生成的实验验证与分析

在最近的研究进展中&#xff0c;AniClipart系统的问世标志着文本到视频生成技术的一个重要里程碑。这一系统由香港城市大学和莫纳什大学的研究者们共同开发&#xff0c;旨在解决将静态剪贴画图像根据文本提示自动转换成动画序列的挑战。传统的动画制作流程繁琐且耗时&#xff0…

基于物联网的教室人数检测系统-设计说明书

设计摘要&#xff1a; 本设计基于物联网技术&#xff0c;实现了一个教室人数检测系统。系统利用STM32单片机作为中控&#xff0c;通过红外对管检测人员进出教室&#xff0c;并实时统计应到人数和实到人数&#xff0c;同时使用OLED显示屏显示相关信息。系统还通过温湿度传感器检…