1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-01-11 02:58:13 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
leetcode-problemset/leetcode-cn/problem (Chinese)/查找给定哈希值的子串 [find-substring-with-given-hash-value].html

46 lines
2.5 KiB
HTML
Raw Normal View History

2022-03-27 20:38:29 +08:00
<p>给定整数 <code>p</code>&nbsp;<code>m</code>&nbsp;,一个长度为 <code>k</code>&nbsp;且下标从 <strong>0</strong>&nbsp;开始的字符串&nbsp;<code>s</code>&nbsp;的哈希值按照如下函数计算:</p>
<ul>
<li><code>hash(s, p, m) = (val(s[0]) * p<sup>0</sup> + val(s[1]) * p<sup>1</sup> + ... + val(s[k-1]) * p<sup>k-1</sup>) mod m</code>.</li>
</ul>
<p>其中&nbsp;<code>val(s[i])</code>&nbsp;表示&nbsp;<code>s[i]</code>&nbsp;在字母表中的下标,从&nbsp;<code>val('a') = 1</code>&nbsp;<code>val('z') = 26</code>&nbsp;</p>
<p>给你一个字符串&nbsp;<code>s</code>&nbsp;和整数&nbsp;<code>power</code><code>modulo</code><code>k</code>&nbsp;&nbsp;<code>hashValue</code>&nbsp;。请你返回 <code>s</code>&nbsp;<strong>第一个</strong> 长度为 <code>k</code>&nbsp;<strong>子串</strong>&nbsp;<code>sub</code>&nbsp;,满足<em>&nbsp;</em><code>hash(sub, power, modulo) == hashValue</code>&nbsp;</p>
<p>测试数据保证一定 <strong>存在</strong>&nbsp;至少一个这样的子串。</p>
<p><strong>子串</strong> 定义为一个字符串中连续非空字符组成的序列。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>s = "leetcode", power = 7, modulo = 20, k = 2, hashValue = 0
<strong>输出:</strong>"ee"
<strong>解释:</strong>"ee" 的哈希值为 hash("ee", 7, 20) = (5 * 1 + 5 * 7) mod 20 = 40 mod 20 = 0 。
"ee" 是长度为 2 的第一个哈希值为 0 的子串,所以我们返回 "ee" 。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>s = "fbxzaad", power = 31, modulo = 100, k = 3, hashValue = 32
<b>输出:</b>"fbx"
<b>解释:</b>"fbx" 的哈希值为 hash("fbx", 31, 100) = (6 * 1 + 2 * 31 + 24 * 31<sup>2</sup>) mod 100 = 23132 mod 100 = 32 。
"bxz" 的哈希值为 hash("bxz", 31, 100) = (2 * 1 + 24 * 31 + 26 * 31<sup>2</sup>) mod 100 = 25732 mod 100 = 32 。
"fbx" 是长度为 3 的第一个哈希值为 32 的子串,所以我们返回 "fbx" 。
注意,"bxz" 的哈希值也为 32 ,但是它在字符串中比 "fbx" 更晚出现。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= k &lt;= s.length &lt;= 2 * 10<sup>4</sup></code></li>
<li><code>1 &lt;= power, modulo &lt;= 10<sup>9</sup></code></li>
<li><code>0 &lt;= hashValue &lt; modulo</code></li>
<li><code>s</code>&nbsp;只包含小写英文字母。</li>
<li>测试数据保证一定 <strong>存在</strong>&nbsp;满足条件的子串。</li>
</ul>