面试题 01.09. 字符串轮转 : 字符串哈希运用题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题 01.09. 字符串轮转 : 字符串哈希运用题相关的知识,希望对你有一定的参考价值。

题目描述

这是 LeetCode 上的 面试题 01.09. 字符串轮转 ,难度为 简单

Tag : 「字符串哈希」

字符串轮转。给定两个字符串 ​​s1​​​ 和 ​​s2​​​,请编写代码检查 ​​s2​​​ 是否为 ​​s1​​​ 旋转而成(比如,​​waterbottle​​​ 是 ​​erbottlewat​​ 旋转后的字符串)。

示例1:

输入:s1 = "waterbottle", s2 = "erbottlewat"

示例2:

输入:s1 = "aa", s2 = "aba"

提示:

  • 字符串长度在

说明: 你能只调用一次检查子串的方法吗?

字符串哈希

若两字符串互为旋转,则「其一字符串」必然为「另一字符串拓展两倍长度后(循环子串)」的子串。

基于此,我们可以使用「字符串哈希」进行求解:先计算 ​​s2​​​ 的字符串哈希值 ​​t​​​,然后构造出 ​​s1 + s1​​​ 的哈希数组和次方数组,在两数组中检查是否存在长度为 的连续子段的哈希值 ​​​cur​​​ 与 ​​t​​ 相等。

不了解字符串哈希的同学可以看前置

以上是关于面试题 01.09. 字符串轮转 : 字符串哈希运用题的主要内容,如果未能解决你的问题,请参考以下文章

面试题 01.09. 字符串轮转

面试题 01.09. 字符串轮转(拼接)

面试算法题 专题 —— 字符串

算法练习80.字符串轮转——奇淫技巧

程序员面试题01

剑指offer-面试题50-第一个只出现一次的字符-哈希表