当前位置: 首页 > news >正文

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

文章目录

      • 1. 替换空格
      • 2. 字符串的左旋转
      • 3. 答案代码
        • 3.1 替换空格
        • 3.2 字符串的左旋转

第五期
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--;}}
http://www.lryc.cn/news/92189.html

相关文章:

  • 使用Anaconda3结合vscode来实现django项目的建立(绝好的介绍)20230608
  • 【软件测试】软件测试的基本概念和开发模型
  • 接口测试 —— 接口测试定义
  • 2015 年一月联考逻辑真题
  • 基于GD32的定时器不完全详解--定时、级联
  • Clion开发STM32之ESP8266系列(四)
  • 降本增效,StarRocks 在同程旅行的实践
  • INTP型人格适合选择哪些专业?
  • 【LeetCode热题100】打卡第16天:组合总和
  • tinkerCAD案例:1.戒子环
  • RPC接口测试技术-Tcp 协议的接口测试
  • MyBatis Plus基本用法-SpringBoot框架
  • 指针--指针变量的定义和初始化
  • Web基本概念
  • Niagara—— Texture Sample 与 Particle Subuv 区别
  • 如何在食品行业运用IPD?
  • 如何用pandas进行条件分组计算?
  • tomcat如何调优,涉及哪些参数?
  • java培训机构学校教学教务选课管理平台springboot+vue
  • 半导体(TSS)放电管的两大选购注意事项及选型小策略
  • 05-使用Vue3 + Vue CLI 实现前端模块的搭建
  • 3.1 增加多进程执行playwright
  • 关于单片机的时钟浅谈及STM32F103/F030单片机的内外时钟切换问题
  • centos6.10环境下安装php7.4(基于WLNMP包)
  • Qt使用第三方库openssl进行RSA加密解密操作详解
  • 激发数学思维:GPT-4实证研究探索挑战性数学问题
  • 如何配置IP地址
  • CentOS + Nginx 环境自动申请和部署Let‘s Encrypt免费SSL证书教程
  • 浅谈对BI工具价值的看法
  • 创建定时任务