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

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

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--;
        }
    }


目录
相关文章
|
存储 安全 算法
【接口加密】Java中的接口加密实践
【接口加密】Java中的接口加密实践
|
Java Spring 容器
@Resource 这个注解什么用啊
@Resource 这个注解什么用啊
656 0
|
缓存 监控 算法
深入理解操作系统:进程调度与性能优化
在现代计算机系统的核心,操作系统承担着资源管理和任务调度的关键职责。进程调度作为操作系统的一个复杂而重要的组成部分,它直接影响到系统的响应时间、吞吐量以及用户体验。本文将详细探讨进程调度的机制、算法以及它们如何影响操作系统的性能。同时,我们还将分析不同的性能优化策略,并讨论它们在实际系统中的实现和效果。
|
Prometheus 监控 Kubernetes
监控对象都有哪些分类
【10月更文挑战第9天】本文介绍了多种监控类型及其特点,包括业务监控、应用监控、组件监控、资源监控、设备监控及网络监控。
|
机器学习/深度学习 供应链 算法
SPSS Modeler分析物流发货明细数据:K-MEANS(K均值)聚类和Apriori关联规则挖掘
SPSS Modeler分析物流发货明细数据:K-MEANS(K均值)聚类和Apriori关联规则挖掘
|
网络协议 PHP 网络虚拟化
BGP MPLS VPN(OPTION C)实验笔记
BGP MPLS VPN(OPTION C)实验笔记
501 1
|
机器学习/深度学习 数据处理 计算机视觉
YOLOv8改进 | 2023 | 将RT-DETR模型AIFI模块和Conv模块结合替换SPPF(全网独家改进)
YOLOv8改进 | 2023 | 将RT-DETR模型AIFI模块和Conv模块结合替换SPPF(全网独家改进)
591 0
|
Kubernetes Java 网络安全
安装nacos报错及解决方案
安装nacos报错及解决方案
379 0
|
前端开发
Vue3之异步组件实现原理
Vue3之异步组件实现原理
375 0
|
消息中间件 Kafka vr&ar
Kafka - AR 、ISR、OSR,以及HW和LEO之间的关系
Kafka - AR 、ISR、OSR,以及HW和LEO之间的关系
361 0
下一篇
oss云网关配置