浅谈C++常见字符串题目

        字符串说白了就一个元素为字符的数组,但我们的函数库为其提供了丰富的函数,使其能够达到一些我想要的要求.对于常见的字符串问题,无非大体上就三种:移动,替换,匹配.

        移动:移动是将字符串的字符或是一段子串按照某中规则进行移动,改变它们原有的位置.最常见也是最经典的题就莫过于反转字符串了(力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台).这类题可是使用双指针以O(n)的时间复杂度来求解().此外还有一些题目如:反转单词(力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台),左旋转单词(力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台)等将一段子串整体位置上的调换,也都是采用了反转的思路(先整体上反转,然后再局部反转),而对于反转这个操作我们就可以使用双指针来一前,一后交换字符位置来实现字符串的反转.

        替换:是把目标字符串中的一部分替换为我们想要的.这通常考验我们对代码的掌控力,能够设计出一种算法来实现对字符串的转换,就比如:上面说的反转单词这道题,我们要先处理字符串,将多余的空格去掉.这就很考验我们对代码的掌控力了,我们要尽可能考虑到各种情况,以便我们设计出算法不会出现BUG,方法上没有什么具体的方法公式,只能靠自己不断地练习了.

        匹配:即模式匹配,判断一个子串是否是某个字符串中的一部分.对这类问题有两种非常经典的算法:BF算法和KMP算法.BF算法是比较简单好理解的,但它相对于KMP算法而言是比较耗时的,而KMP算法最重要就是要知道什么是前缀表,也就是next数组(最长相等前后缀构成的集合),KMP算法就是在前缀表的基础上进行的.经典例题有力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台,还有重复子字符串(力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台),这题可以使用前缀表进行巧妙的求---在结果为true的字符串s中,它的next数组的最后一个元素的值就是重复子串的长度.

        以上就对于字符串常见问题的一些出略总结,希望能对大家有所帮助.

        

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值