剑指offer

字符串相关操作

题目1:

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

理解Code

很简单的题目, 但是重点在于实现的方式有多种, 这里主要介绍三种实现方式.

  • 字符串函数replace
  • 字符串函数join
  • 遍历字符串, 然后借助列表存储元素.

Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 请实现一个函数,把字符串 s 中的每个空格替换成"%20"
# 类名要使用大驼峰方式命名, 函数名要使用小驼峰方式命名
class Solution():
# 定义替换空格的函数, 实现传入一个字符串,返回一个处理过的字符串
def replaceSpace(self, s1:str) -> str:
# 方法一实现
str = s1.replace(' ', '')
return str
def replaceSpace2(self, s: str) -> str:
# 方法二实现
return ''.join(s.split(' '))
def replaceSpace3(self, s: str) -> str:
# 方法三实现
res = []
# 遍历字符串(将字符串中的空格替换成%20)并追加到列表末尾
for i in s:
if i == ' ':
# 如果为空格就替换
res.append('%20')
else:
res.append(i)
# join 是将(列表)中的元素拼接成字符串的作用
return "".join(res)
# 测试
s = Solution()
print(s.replaceSpace2('1 jhsghl 2323'))

题目2

左旋字符串,字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。

请定义一个函数实现字符串左旋转操作的功能。

比如,输入字符串”abcdefg”和数字2,该函数将返回左旋转两位得到的结果”cdefgab”。

理解Code

定义函数实现给定字符串, 以及左旋的字符个数, 最终返回一个处理过的字符串.

上面的题目已经给出了例子,这里就不多bb了, 贴代码

Demo

1
2
3
4
5
6
7
8
class Solution(object):
def leftreverseWords(self, s: str, n: int) -> str:
# abcdefg -> cdefg ab
# 使用字符串切片
return s[n:] + s[:n]

s = Solution()
print(s.leftreverseWords('abcdefg', 2))

题目三

递归实现字符串的逆置

理解Code

什么是递归: 就是自身调用自身的过程, 但是为了防止死循环, 会有退出条件

递归的逻辑就那几句, 但是很难想.(个人感觉)

Python(非递归)

1
2
3
4
5
6
7
8
class Soultion():
# 定义功能函数, 返回值为str类型
def recursionreverseString(self, s: str) -> str:
# 思想: 用递归实现, 每次都将str的第一个元素放到末尾
return s[::-1]

s = Soultion()
print(s.recursionreverseString('abcdefg'))

Java(递归)

1
2
3
4
5
6
7
8
9
10
11
public class StringReverse {
public static String reverse1(String originalStr){
if (originalStr == null || originalStr.length() == 1){
return originalStr;
}
return reverse1(originalStr.substring(1)) + originalStr.charAt(0);
}
public static void main(String[] args) {
System.out.println(reverse1("abcdefg"));
}
}