字符串的操作

43 阅读5分钟

力扣第344题:反转字符串;

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须**原地修改输入数组**、使用 O(1) 的额外空间解决这一问题。

 

示例 1:

输入: s = ["h","e","l","l","o"]
输出: ["o","l","l","e","h"]

示例 2:

输入: s = ["H","a","n","n","a","h"]
输出: ["h","a","n","n","a","H"]

如果想到了双指针的方法,该题会非常简单,只需要设置一个start指向开头,设置一个end指向末尾,然后两者调换,然后start++,end--即可。

代码如下:

image.png 很简单,一看就懂。

那么如果输入的内容是一个字符串呢,然后将其反转。

题目如下:

输入一个字符串:s=“hello”;将其反转输出s=“olleh”;

也可以利用上一题类似的思路:双指针来解决。

image.png 可以看到,其实思路都是一样的,只不过是把对char[]的操作变为了对字符串s的操作。实现该操作还可以用另一种方法:这种方法适用的题目更多,但可能只能用java。

StringBuilderl类方法。 java.lang.StringBuilder;

StringBuilder方法介绍(我只写了接下来会用到的):

image.png 2.

image.png

image.png

image.png

代码如下:

image.png

可以看到,只需要将字符串逆序连接即可。

卡码网 54 替换数字(第八期模拟笔试)

时间限制:1.000S  空间限制:128MB

题目描述

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。

输入描述

输入一个字符串 s,s 仅包含小写字母和数字字符。

输出描述

打印一个新的字符串,其中每个数字字符都被替换为了number

输入示例
a1b2c3
输出示例
anumberbnumbercnumber

利用StringBuilder来解题:

首先定义一个StringBuilder变量:StringBuilder sb = new StringBuilder(); 然后遍历字符串,如果是字母,直接连接该字母即可,如果是数字,连接一个字符串“number”即可.

image.png 代码如下:

image.png

其中Character.isDigit()是用来判断括号中的内容是否是数字。 另外还有Character.isUpperCase()和Character.isLowerCase().两者分别用来判断大写字母和小写字母。

卡码网55. 右旋字符串(第八期模拟笔试)

题目描述

字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。 

例如,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。

输入描述

输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。第二行为字符串 s,代表需要旋转的字符串。

输出描述

输出共一行,为进行了右旋转操作后的字符串。

输入示例
2
abcdefg
输出示例
fgabcde

不需要动脑子的方法:找到字符串长度-k的位置,然后从该位置遍历到字符串末尾,然后连接,然后遍历字符串开头到该位置,然后连接即可。

代码如下:

image.png

需要动脑子的方法: 将字符串翻转一次,然后根据k值再对其进行翻转,举例:abcdefg,k=2,那么第一次翻转得到gfdecba,然后根据k=2,分别将gf和decba进行翻转即可。其中最主要的就是写翻转的方法。

代码如下:

image.png

力扣151题:反转字符串里的单词:

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意: 输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

 

示例 1:

输入: s = "the sky is blue"
输出: "blue is sky the"

示例 2:

输入: s = "  hello world  "
输出: "world hello"
解释: 反转后的字符串中不能存在前导空格和尾随空格。

示例 3:

输入: s = "a good   example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。

该题有很多不确定因素,那就是不同示例中空格的位置,可能在最前面,可能在最后面,也可能在中间,那么我们就要先去除多余的空格。

去除空格的代码如下:

image.png 这样就得到了一个不带多余空格的StringBuilder对象sb; 例如示例2中的s=“ hello world”现在就成了 sb = “hello world”; 然后就是进行字符串翻转了,如示例1:翻转1次:eulb si yks eht

只需要写一个翻转函数,然后传入参数即可:

翻转代码:

函数调用:

image.png

函数实现:

image.png 接下来就是对每个单词的翻转了: eulb si yks eht ---> blue is sky the

翻转如下:

函数调用:

image.png

函数实现:

image.png

完整代码:

99646c3476ab0b038c819f523d8ffd6.png

e52bb33c832a6c90b1ae654556d6f22.png

该函数实现中用到了,StringBuilder的方法:sb.setCharAt(index,ch),将index索引位置的元素修改为字符ch。

总结:

对于StringBuilder的使用方法:

1.作为一个新的字符串数组来获取原字符串中所需要的部分并连接在后面,形成一个新的字符串数组,返回toString()就是一个新的字符串了。

2.用来实现字符串的翻转。方法如下:

image.png