代码随想录-day8
反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
- 示例 1:
输入:[“h”,”e”,”l”,”l”,”o”]
输出:[“o”,”l”,”l”,”e”,”h”] - 示例 2:
输入:[“H”,”a”,”n”,”n”,”a”,”h”]
输出:[“h”,”a”,”n”,”n”,”a”,”H”]
1 | class Solution: |
这道题的思路是用双指针的方式,分别指向头尾,然后交换位置,循环判断条件就到中间位置(比长度的一半小)。
反转字符串II
给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
- 示例:
输入: s = “abcdefg”, k = 2
输出: “bacdfeg”
1 | class Solution: |
1 | class Solution: |
这道题的主要特点是切片的方式是以2k为步长,每次取k个字符进行反转。
并且python的切片操作是可以超出索引范围的,会自动截断为有效范围。(Python 切片的容错特性:无需判断剩余字符长度,i:i+k 自动截断为有效范围,让 “反转前 k 个 / 反转全部剩余” 的要求自然满足),i相当于一个指针,每次移动2k个位置,只要能移动在下一次循环就进行切片。
替换数字
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。
- 例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anumberbnumbercnumber”。
对于输入字符串 “a5b”,函数应该将其转换为 “anumberb”
输入:一个字符串 s,s 仅包含小写字母和数字字符。
输出:打印一个新的字符串,其中每个数字字符都被替换为了number
样例输入:a1b2c3
样例输出:anumberbnumbercnumber
数据范围:1 <= s.length < 10000。
1 | n = input() |
这道题还是用双指针的方式,一个指向原字符串的尾,一个指向新字符串的尾,根据是否为数字字符来判断是否需要替换。
如果是c语言从后向前可以避免每次替换后需要移动后面的字符的问题。python因为字符串是不可变的,所以需要先将字符串转换为列表,修改后再转换为字符串。
然后就是要两个指针一一对应,一个指向原字符串的当前字符,一个指向新字符串的当前位置。