mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-01-10 18:48:13 +08:00
81 lines
4.6 KiB
HTML
81 lines
4.6 KiB
HTML
<p>给你一个长度为 <strong>偶数</strong> <code>n</code> ,下标从 <strong>0</strong> 开始的字符串 <code>s</code> 。</p>
|
||
|
||
<p>同时给你一个下标从 <strong>0</strong> 开始的二维整数数组 <code>queries</code> ,其中 <code>queries[i] = [a<sub>i</sub>, b<sub>i</sub>, c<sub>i</sub>, d<sub>i</sub>]</code> 。</p>
|
||
|
||
<p>对于每个查询 <code>i</code> ,你需要执行以下操作:</p>
|
||
|
||
<ul>
|
||
<li>将下标在范围 <code>0 <= a<sub>i</sub> <= b<sub>i</sub> < n / 2</code> 内的 <strong>子字符串</strong> <code>s[a<sub>i</sub>:b<sub>i</sub>]</code> 中的字符重新排列。</li>
|
||
<li>将下标在范围 <code>n / 2 <= c<sub>i</sub> <= d<sub>i</sub> < n</code> 内的 <strong>子字符串</strong> <code>s[c<sub>i</sub>:d<sub>i</sub>]</code> 中的字符重新排列。</li>
|
||
</ul>
|
||
|
||
<p>对于每个查询,你的任务是判断执行操作后能否让 <code>s</code> 变成一个 <strong>回文串</strong> 。</p>
|
||
|
||
<p>每个查询与其他查询都是 <strong>独立的</strong> 。</p>
|
||
|
||
<p>请你返回一个下标从 <strong>0</strong> 开始的数组<em> </em><code>answer</code> ,如果第 <code>i</code> 个查询执行操作后,可以将 <code>s</code> 变为一个回文串,那么<em> </em><code>answer[i] = true</code>,否则为<em> </em><code>false</code> 。</p>
|
||
|
||
<ul>
|
||
<li><strong>子字符串</strong> 指的是一个字符串中一段连续的字符序列。</li>
|
||
<li><code>s[x:y]</code> 表示 <code>s</code> 中从下标 <code>x</code> 到 <code>y</code> 且两个端点 <strong>都包含</strong> 的子字符串。</li>
|
||
</ul>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong class="example">示例 1:</strong></p>
|
||
|
||
<pre>
|
||
<b>输入:</b>s = "abcabc", queries = [[1,1,3,5],[0,2,5,5]]
|
||
<b>输出:</b>[true,true]
|
||
<b>解释:</b>这个例子中,有 2 个查询:
|
||
第一个查询:
|
||
- a<sub>0</sub> = 1, b<sub>0</sub> = 1, c<sub>0</sub> = 3, d<sub>0</sub> = 5
|
||
- 你可以重新排列 s[1:1] => a<em><strong>b</strong></em>cabc 和 s[3:5] => abc<em><strong>abc</strong></em> 。
|
||
- 为了让 s 变为回文串,s[3:5] 可以重新排列得到 => abc<strong><em>cba </em></strong>。
|
||
- 现在 s 是一个回文串。所以 answer[0] = true 。
|
||
第二个查询:
|
||
- a<sub>1</sub> = 0, b<sub>1</sub> = 2, c<sub>1</sub> = 5, d<sub>1</sub> = 5.
|
||
- 你可以重新排列 s[0:2] => <em><strong>abc</strong></em>abc 和 s[5:5] => abcab<strong><em>c</em></strong> 。
|
||
- 为了让 s 变为回文串,s[0:2] 可以重新排列得到 => <em><strong>cba</strong></em>abc 。
|
||
- 现在 s 是一个回文串,所以 answer[1] = true 。
|
||
</pre>
|
||
|
||
<p><strong class="example">示例 2:</strong></p>
|
||
|
||
<pre>
|
||
<b>输入:</b>s = "abbcdecbba", queries = [[0,2,7,9]]
|
||
<b>输出:</b>[false]
|
||
<b>解释:</b>这个示例中,只有一个查询。
|
||
a<sub>0</sub> = 0, b<sub>0</sub> = 2, c<sub>0</sub> = 7, d<sub>0</sub> = 9.
|
||
你可以重新排列 s[0:2] => <em><strong>abb</strong></em>cdecbba 和 s[7:9] => abbcdec<em><strong>bba</strong></em> 。
|
||
无法通过重新排列这些子字符串使 s 变为一个回文串,因为 s[3:6] 不是一个回文串。
|
||
所以 answer[0] = false 。</pre>
|
||
|
||
<p><strong class="example">示例 3:</strong></p>
|
||
|
||
<pre>
|
||
<b>输入:</b>s = "acbcab", queries = [[1,2,4,5]]
|
||
<b>输出:</b>[true]
|
||
<strong>解释:</strong>这个示例中,只有一个查询。
|
||
a<sub>0</sub> = 1, b<sub>0</sub> = 2, c<sub>0</sub> = 4, d<sub>0</sub> = 5.
|
||
你可以重新排列 s[1:2] => a<em><strong>cb</strong></em>cab 和 s[4:5] => acbc<strong><em>ab</em></strong> 。
|
||
为了让 s 变为回文串,s[1:2] 可以重新排列得到 => a<em><strong>bc</strong></em>cab<code> </code>。
|
||
然后 s[4:5] 重新排列得到 abcc<em><strong>ba</strong></em> 。
|
||
现在 s 是一个回文串,所以 answer[0] = true 。</pre>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong>提示:</strong></p>
|
||
|
||
<ul>
|
||
<li><code>2 <= n == s.length <= 10<sup>5</sup></code></li>
|
||
<li><code>1 <= queries.length <= 10<sup>5</sup></code></li>
|
||
<li><code>queries[i].length == 4</code></li>
|
||
<li><code>a<sub>i</sub> == queries[i][0], b<sub>i</sub> == queries[i][1]</code></li>
|
||
<li><code>c<sub>i</sub> == queries[i][2], d<sub>i</sub> == queries[i][3]</code></li>
|
||
<li><code>0 <= a<sub>i</sub> <= b<sub>i</sub> < n / 2</code></li>
|
||
<li><code>n / 2 <= c<sub>i</sub> <= d<sub>i</sub> < n </code></li>
|
||
<li><code>n</code> 是一个偶数。</li>
|
||
<li><code>s</code> 只包含小写英文字母。</li>
|
||
</ul>
|