第五期:字符串的一些有意思的操作

简介: 第五期:字符串的一些有意思的操作

PS:每道题解题方法不唯一,欢迎讨论!每道题后都有解析帮助你分析做题,答案在最下面,关注博主每天持续更新。


1. 替换空格

题目描述

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例1:

输入:s = “We are happy.”

输出:“We%20are%20happy.”

示例2:

输入:s = “hello world.”

输出:s = “hello%20world.”

解析:

在Java中我们要知道字符串的本身是没办法直接改变的,所有只能在一个新的字符串上面实现。

所有我们就有了思路,创建一个新的字符串,遍历老的字符串,当是空格的时候新的字符串加上个%20,不是空格直接加上这个字符,最后遍历完成,得到的字符串便是我们想要的结果。(方法一)

注意:


创建新的字符串不能创建String类型,要创建StringBuilder ,因为String在相加的时候一直创建新的字符串,消耗内存大。

-也可以使用库方法replace(),但是这样便失去了刷题的意义,而且在面试的时候,面试官也不希望看到这样的代码。(方法二)


2. 字符串的左旋转

题目描述

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例1:

输入: s = “abcdefg”, k = 2

输出: “cdefgab”

示例2:

输入: s = “lrloseumgh”, k = 6

输出: “umghlrlose”

解析:

这道题有个取巧的方法,就是应用切片函数,进行字符串的切片,调用substring()库方法。(方法一)。

面试的时候这种方法可能不让用,所以我们可以用另一种方法。

列表遍历拼接,创建一个StringBuilder的字符串,依次拼接k + 1到末尾字符,然后再拼接首位字符到k,最后返回字符串。(方法二)

还可以通过旋转字符的方式来做,但是比较麻烦,我们先把字符串转为字符数组,然后分别旋转0 ~ k-1,k ~ arr.length - 1坐标元素,最后再旋转整个数组,把这个数组再转化为字符串,我们便得到了我们想要的结果。(方法三)


3. 答案代码

3.1 替换空格

  //方法一
    public String replaceSpace(String s) {
        StringBuilder stringbuilder = new StringBuilder();
        int len = s.length();
        for(int i = 0; i < len; i++){
            char ch = s.charAt(i);
            if(ch == ' '){
                stringbuilder.append("%20");
            }else{
                stringbuilder.append(ch);
            }
        }
        return stringbuilder.toString();
    }
    //方法二 
  public String replaceSpace(String s) {
      return s.replace(" ", "%20");
  }


3.2 字符串的左旋转

  //方法一
    public String reverseLeftWords(String s, int n) {
        return s.substring(n) + s.substring(0, n); 
    }
    //方法二
    public String reverseLeftWords(String s, int n) {
        StringBuilder res = new StringBuilder();
        for(int i = n; i < s.length(); i++){
            res.append(s.charAt(i));
        }
        for(int i = 0; i < n; i++){
            res.append(s.charAt(i));
        }    
        return res.toString();
    }
    //方法三
    public String reverseLeftWords(String s, int n) {
        char[] arr = s.toCharArray();
        reverse(arr, 0, n - 1);
        reverse(arr, n, arr.length - 1);
        reverse(arr, 0, arr.length - 1);
        s = new String(arr);
        return s;
    }
    public void reverse(char[] arr, int left, int right){
        while(left < right){
            char tmp = arr[left];
            arr[left] = arr[right];
            arr[right] = tmp;
            left++;
            right--;
        }
    }


目录
相关文章
|
7月前
|
弹性计算 关系型数据库 对象存储
阿里云国际实名账号vs 非实名账号:如何选择更适合你的方案?
阿里云国际站提供实名与非实名账号选择,实名账号可购买中国大陆云产品,适合需国内业务合规的企业;非实名账号适用于海外部署,无需备案,灵活便捷。根据业务需求选择,助力全球化部署。
|
10月前
HarmonyOS实战:Tab顶部滑动悬停功能实现
在鸿蒙开发中,实现Scroll嵌套List列表滑动时顶部悬停的效果是一个常见需求。本文详细介绍了如何通过布局和事件处理来实现这一功能。首先,使用Scroll嵌套List和Tab布局来构建基础页面。然后,通过设置nestedScroll属性为NestedScrollMode.PARENT_FIRST,确保外层Scroll优先滑动。接着,通过监听List和Scroll的滑动事件,处理滑动冲突,确保在特定条件下Scroll停止滑动,将滑动事件交给List处理。最终,实现了在上下滑动时优先让Scroll滑动的效果,并提供了扩展思路,如优先让List滑动等。
442 10
HarmonyOS实战:Tab顶部滑动悬停功能实现
|
数据采集 物联网
三分钟轻松搞定固定资产盘点--首码RFID资产盘点小助手
首码 RFID 盘点小助手是一款功能强大、操作便捷的资产管理工具,能够助力企业在短短 3 分钟内轻松完成资产盘点
522 9
|
Cloud Native JavaScript Devops
云原生技术在现代软件开发中的应用与实践
本文将深入探讨云原生技术如何改变现代软件开发的格局。通过分析云原生的核心概念、优势以及在实际开发中的应用案例,我们将了解这一前沿技术如何助力企业快速适应市场变化,提高开发效率和系统稳定性。文章还将提供实用的代码示例,帮助开发者更好地理解和运用云原生技术。
|
缓存 关系型数据库 MySQL
MySQL慢查询优化
通过上述方法综合施策,可以显著提升MySQL数据库的查询性能,降低延迟,增强应用系统的整体响应能力。实践中,优化工作是一个持续迭代的过程,需要结合具体应用场景不断调整策略。
1019 2
|
Prometheus 监控 Kubernetes
监控对象都有哪些分类
【10月更文挑战第9天】本文介绍了多种监控类型及其特点,包括业务监控、应用监控、组件监控、资源监控、设备监控及网络监控。
|
算法 5G 文件存储
【5G NR】NG接口
NG接口指无线接入网与5G核心网之间的接口。在5G SA网络中,gNB之间通过Xn接口进行连接,gNB与5GC之间通过NG接口进行连接。NG接口分为NG-C接口和NG-U接口。NG-C接口为控制面接口,连接双方为gNB与AMF,传输控制面数据;NG-U接口为用户面接口,连接双方为gNB与UPF,传输用户面数据。
1756 0
【5G NR】NG接口
|
JavaScript Serverless 对象存储
3分钟使用OSS搭建个人的在线图床
代码已经提前给大伙儿码好了(原生三大件,无框架代码),大伙儿只需要注册个七牛云账号,改4行代码即可 最终效果如下,非常简洁(麻雀虽小五脏俱全) 支持复制粘贴,截图,手动选择,拖拽等四种常见的上传方案
|
小程序 关系型数据库 MySQL
一套满足企业自建OpenAPI、接口平台的解决方案、产品和源代码
企业自建接口平台的好处。 在现代软件系统项目开发中,API接口是不可或缺的组成部分。 不管是内部系统之间的接口调用和提供,还是外部API接口的对接和开发,搭建企业自己统一的接口平台,对API接口的开发、管理和维护,都会大有裨益。