大家好!
今天分享字符串中的逆序问题!
这一块也是字符串中比较简单的内容。
然后后面两节会是字符串中比较硬核的内容,分别是字符串中的动态规划问题和 KMP 算法。
今天先来说逆序!
说在前面
言归正传,这一期来说说字符串的第四块内容 「字符串 - 逆序」
github:https://github.com/xiaozhutec/share_leetcode
文档地址:https://github.com/xiaozhutec/share_leetcode/tree/master/docs
整体架构:
字符串 - 逆序
今天这期内容是字符串的第四期。
逆序这个逻辑很简单哈,就是在有限的时间范围内把字符串倒置:
比如:“Hannah” 逆序后为 “hannaH”
一般是要在时间复杂度为 O(N),空间额外复杂度为 O(1)
字符串「逆序」方面的问题(还拿字符串 “Hannah” 逆序后为 “hannaH” 为例)
一般的思路是:
设两个指针 left 和 right 分别指向字符串最左边和最右边,然后指针指向的字符不断交换,直到 left 不小于 right。
下图为例,left 指向字符串最左边,right 指向字符串最右边,进行不断的交换。
再往后,会发现 left < right 的条件不满足,退出执行。
而此时,字符串已经全部逆序了。
时间复杂度方面,由于是线性执行,所以是 O(N);
额外空间复杂度方面,仅仅是在交换的时候会借助一个字符的空间进行交换。所以额外空间复杂度是 O(1)。
大概的思路基本就是这样,下面用两个常见的案例来感受这种类型题目的具体解决方法。
案例
整体关于字符串「逆序」方面的问题是很简单的,只要稍加注意一点中间的细节即可!
下面会通过两个案例进行举例,分别是 LeetCode 的 344 题 和 LeetCode 的 541 题
344.反转字符串【简单】
541.反转字符串【简单】
344.反转字符串【简单】
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
输入:s = ["h","e","l","l","o"] 输出:[