字符串
反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
- 思路: 双指针
反转字符串二
给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
- 思路:就是一个模拟的过程,关键是找到首末位,再一个就是末位的判断,然后双指针。
替换数字
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anumberbnumbercnumber”。
- 思路: 第一个要点是知道构建后的数组长度,第二个要点是如何替换,替换按照倒着的方法遍历旧数组,判断为数字,然后接下来的5个空都是要被替换
的内容。
反转字符串
给定一个字符串,逐个翻转字符串中的每个单词。
- 思路:分三个步骤,将字符串中多余的空格删除,反转字符串,再反转字符串内的每一个单词。三个步骤就是三个函数。
右旋字符串
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。
- 思路,先将字符串全部反转,然后再将字符串按照位置分为前后两段,前后两端各自又进行反转。
找字符串第一个匹配的下标
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。
- 思路: kmp算法,kmp算法具体是用到一个前缀表,前缀表记录的是字符串前缀的数量,当出现前后不相同的情况,将指针按照前缀表的记录回滚到对应位置,
所以本题的关键便是建立前缀表,前缀表的建立分为三个步骤,第一步是初始化指针和前缀表,第二步是判断前缀是否相同,相同则指针加一,也就是指针前移,第三步是前缀不同的情况
前缀不同时,就将指针回滚到前缀表上一个记录的位置。每次循环完成,都要填写前缀表。 - 查询的时候就方便了,两个指针分别指向两个字符,相同则指针加1,不同则将指向有前缀表的数组的指针回滚到前缀表的上一个记录。
重复的子字符串
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
- 思路:还是kmp算法,最后加了一个判断条件,如果这个字符说重复的,那么它的前缀表的最后一位就是最大前缀长度,在被该字符长度减掉之后还是能够
被字符长度整除的。