【完虐算法】字符串-旋转词 复盘总结

大家好吖,我是Johngo!

有几天没有更新文章了,居然把前几天的送书的事情忘记了。

今天一起吧!!

说在前面

言归正传,这一期来说说字符串的第三块内容「字符串 - 旋转词」

github:https://github.com/xiaozhutec/share_leetcode

文档地址:https://github.com/xiaozhutec/share_leetcode/tree/master/docs

整体架构:

字符串 - 旋转词

今天这期内容是字符串的第三期。

首先,把什么是旋转词进行一个简单的说明:

所谓字符串的旋转,分为左右旋转。

以左旋转为例:就是把字符串前面的若干字符转移到字符串的尾部这样的操作

比如说字符串 "abcdefg" 左旋转 2 个三位,得到字符串 "abcdefg"。

字符串「旋转词」方面的问题(还拿字符串 "abcdefg" 和 "cdefgab" 为例)

令 A = "abcdefg",B = "cdefgab"

一般的思路是:

将 A = A+A,判断 字符串 B 是否被包含进去字符串 A+A。

下图为例,将 A 做 A = A+A 的操作,形成一个大字符串

之后,判断字符串 B 是否被包含进上图中的大字符串即可解决。

image-20211104130051932

发现,正好匹配,问题解决!

说明字符串 A 和字符串 B 互为旋转词。

案例

整体关于字符串「旋转词」方面的问题是比较简单的,个人认为只要掌握其一般思路即可。

下面会通过两个案例进行举例,分别是 LeetCode 的 796 题剑指 Offer 58 题

796.旋转字符串【简单】

剑指 Offer 58 - II. 左旋转字符串【简单】

796.旋转字符串【简单】

给定两个字符串, A 和 B。

A 的旋转操作就是将 A 最左边的字符移动到最右边。 例如, 若 A = 'abcde',在移动一次之后结果就是'bcdea' 。如果在若干次旋转操作之后,A 能变成B,那么返回True。

输入: A = 'abcde', B = 'cdeab'
输出: true

整体这个题目还是比较简单的,解决的思路就是上述介绍的方式。

即 字符串 A+A 包含字符串 B:

实现起来也很简单,就一行即可。

咱们直接用 Python 来解决:

class Solution(object):
    def rotateString(self, s, goal):
        return len(s) == len(goal) and s in goal+goal

在这里利用了 Python 固有的方式,可以进行子串判断。

事实上,还有一种算法咱们是需要着重掌握的,那就是著名的 KMP 算法。

KMP 算法是专门用来判断子串判断的算法,后面有一期会非常详细的就 KMP 进行分享。

剑指 Offer 58 - II. 左旋转字符串【简单】

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

输入: s = "abcdefg", k = 2
输出: "cdefgab"

这个题目虽然也是标记的简单,但需要加一步骤,就是给定的 k 值。

也可以分为两种思路解决。

方法一:s2 = s + s,得到s[k, size(s)+k]即为原字符串 s 旋转了 k 个位置的旋转词

方法二:将字符串的 s 的前 k 位复制一份接到字符串 s 的最后,得到 s[k:] 为 s 旋转了 k 个位置的旋转词

好!先来看看方法一:

拼接字符串 s,然后当 k=2的时候,截取固定长度(字符串 s 的长度)。

image-20211104131934910

最后返回截取的字符串,得到答案。

看超级简约的代码:

class Solution(object):
    def reverseLeftWords(self, s, n):
        size = len(s)
        s2 = s + s
        return s2[n:size+n]

或者再简约点:

class Solution(object):
    def reverseLeftWords(self, s, n):
        s2 = s + s
        return s2[n:len(s)+n]

再看方法二:

将前 k 个元素,依次接到字符串 s 的后边。

进而获取固定长度(字符串 s 的长度)的字符串,得到答案。

简洁的代码来了:

class Solution(object):
    def reverseLeftWords1(self, s, n):
        size = len(s)
        for i in range(n):
            s += s[i]
        return s[n:]

还可以更加简洁一些, 即不用循环,直接截取前 k 个字符拼接到 s 的最后即可!

好了,今天内容比较简单一些。就是关于字符串「旋转词」进行了分享。

另外,方便的话也在我的github

原文地址:https://www.cnblogs.com/yydsxiaozhu/p/15509205.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


咱们在vscode中使用copilot的过程中,有可能会涉及到个人账号和其他账号的互相切换,在网上找了半天都没找到相应的资料,于是就自己摸索了一下,终于找到了方法。解决思路:经过试验,github copilot插件是使用的vsc
这篇文章给大家介绍怎么在GitHub上快速找到实用资源,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。搜热门:GitHub Trend 和 GitHub Top...
这篇文章主要介绍“github缓存穿透的解决方法是什么”,在日常操作中,相信很多人在github缓存穿透的解决方法是什么问题上存在疑惑,小编查阅了各式资料,整理出...
本篇内容介绍了“github线性回归怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧...
怎样使用GitHub,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。GitHub简介...
今天小编给大家分享一下GitHub的高级搜索方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下...
这期内容当中小编将会给大家带来有关Github 1.9K Star的数据治理框架Amundsen如何理解,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可...
本篇文章为大家展示了git如何设置代理提升github clone速度,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。github...
本篇内容介绍了“github怎么实现FaceU边框模糊效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理...
本篇内容介绍了“GitHub基础操作有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧...
这篇文章主要介绍了Github操作技巧实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Github操作技巧实例分析文章都会有
今天小编给大家分享一下github设备激活的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大...
本文小编为大家详细介绍“GitHub的命令行工具有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“GitHub的命令行工具有哪些”文章能帮助大家解决疑惑,下面...
本篇内容主要讲解“GitHub网页githubusercontent地址无法访问怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大...
本文小编为大家详细介绍“怎么使用Github Action发布jar到Maven中央仓库”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Github Action发布jar到Maven...
本文小编为大家详细介绍“GitHub中如何修改默认的分支”,内容详细,步骤清晰,细节处理妥当,希望这篇“GitHub中如何修改默认的分支”文章能帮助大家解决疑惑...
这篇“Github访问速度慢及图片加载慢问题怎么处理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价
这篇文章主要介绍“vue项目打包上传github并制作预览链接的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue...
这篇文章主要讲解了“访问不了github怎么处理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“访问不了gith...
今天小编给大家分享一下GitHub访问不了怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希