剑指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
|
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 = [] for i in s: if i == ' ': res.append('%20') else: res.append(i) 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: return s[n:] + s[:n]
s = Solution() print(s.leftreverseWords('abcdefg', 2))
|
题目三
递归实现字符串的逆置
理解Code
什么是递归: 就是自身调用自身的过程, 但是为了防止死循环, 会有退出条件
递归的逻辑就那几句, 但是很难想.(个人感觉)
Python(非递归)
1 2 3 4 5 6 7 8
| class Soultion(): def recursionreverseString(self, s: 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")); } }
|