1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-09-05 23:41:41 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
This commit is contained in:
2024-02-19 15:29:53 +08:00
parent 6bfbd3556c
commit 5028bd771c
70 changed files with 21089 additions and 14223 deletions

View File

@@ -0,0 +1,38 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始长度为 <code>3</code>&nbsp;的整数数组&nbsp;<code>nums</code>&nbsp;,需要用它们来构造三角形。</p>
<ul>
<li>如果一个三角形的所有边长度相等,那么这个三角形称为&nbsp;<strong>equilateral</strong>&nbsp;</li>
<li>如果一个三角形恰好有两条边长度相等,那么这个三角形称为&nbsp;<strong>isosceles</strong>&nbsp;</li>
<li>如果一个三角形三条边的长度互不相同,那么这个三角形称为&nbsp;<strong>scalene</strong>&nbsp;</li>
</ul>
<p>如果这个数组无法构成一个三角形,请你返回字符串&nbsp;<code>"none"</code>&nbsp;,否则返回一个字符串表示这个三角形的类型。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>nums = [3,3,3]
<b>输出:</b>"equilateral"
<b>解释:</b>由于三条边长度相等,所以可以构成一个等边三角形,返回 "equilateral" 。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>nums = [3,4,5]
<b>输出:</b>"scalene"
<b>解释:</b>
nums[0] + nums[1] = 3 + 4 = 7 ,大于 nums[2] = 5 <span style="text-wrap: wrap;"></span>
nums[0] + nums[2] = 3 + 5 = 8 ,大于 nums[1] = 4 。
nums[1] + nums[2] = 4 + 5 = 9 ,大于 nums[0] = 3 。
由于任意两边之和都大于第三边,所以可以构成一个三角形,因为三条边的长度互不相等,所以返回 "scalene"。
</pre>
<p><strong>提示:</strong></p>
<ul>
<li><code>nums.length == 3</code></li>
<li><code>1 &lt;= nums[i] &lt;= 100</code></li>
</ul>

View File

@@ -0,0 +1,35 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始只包含 <strong></strong>&nbsp;整数的数组&nbsp;<code>nums</code>&nbsp;</p>
<p>一开始,你可以将数组中 <strong>任意数量</strong> 元素增加 <strong>至多</strong> <code>1</code></p>
<p>修改后,你可以从最终数组中选择 <strong>一个或者更多</strong>&nbsp;元素,并确保这些元素升序排序后是 <strong>连续</strong>&nbsp;的。比方说,<code>[3, 4, 5]</code> 是连续的,但是&nbsp;<code>[3, 4, 6]</code>&nbsp;<code>[1, 1, 2, 3]</code>&nbsp;不是连续的。<!-- notionvc: 312f8c5d-40d0-4cd1-96cc-9e96a846735b --></p>
<p>请你返回 <strong>最多</strong>&nbsp;可以选出的元素数目。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>nums = [2,1,5,1,1]
<b>输出:</b>3
<b>解释:</b>我们将下标 0 和 3 处的元素增加 1 ,得到结果数组 nums = [3,1,5,2,1] 。
我们选择元素 [<em><strong>3</strong></em>,<em><strong>1</strong></em>,5,<em><strong>2</strong></em>,1] 并将它们排序得到 [1,2,3] ,是连续元素。
最多可以得到 3 个连续元素。</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>nums = [1,4,7,10]
<b>输出:</b>1
<b>解释:</b>我们可以选择的最多元素数目是 1 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>6</sup></code></li>
</ul>

View File

@@ -0,0 +1,35 @@
<p>给你一个下标从 <strong>0</strong> 开始、大小为 <code>m x n</code> 的整数矩阵 <code>matrix</code> ,新建一个下标从 <strong>0</strong> 开始、名为 <code>answer</code> 的矩阵。使 <code>answer</code><code>matrix</code> 相等,接着将其中每个值为 <code>-1</code> 的元素替换为所在列的 <strong>最大</strong> 元素。</p>
<p>返回矩阵 <code>answer</code></p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2023/12/24/matrix1.png" style="width: 491px; height: 161px;" />
<pre>
<strong>输入:</strong>matrix = [[1,2,-1],[4,-1,6],[7,8,9]]
<strong>输出:</strong>[[1,2,9],[4,8,6],[7,8,9]]
<strong>解释:</strong>上图显示了发生替换的元素(蓝色区域)。
- 将单元格 [1][1] 中的值替换为列 1 中的最大值 8 。
- 将单元格 [0][2] 中的值替换为列 2 中的最大值 9 。
</pre>
<p><strong class="example">示例 2</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2023/12/24/matrix2.png" style="width: 411px; height: 111px;" />
<pre>
<strong>输入:</strong>matrix = [[3,-1],[5,2]]
<strong>输出:</strong>[[3,2],[5,2]]
<strong>解释:</strong>上图显示了发生替换的元素(蓝色区域)。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>m == matrix.length</code></li>
<li><code>n == matrix[i].length</code></li>
<li><code>2 &lt;= m, n &lt;= 50</code></li>
<li><code>-1 &lt;= matrix[i][j] &lt;= 100</code></li>
<li>测试用例中生成的输入满足每列至少包含一个非负整数。</li>
</ul>

View File

@@ -0,0 +1,66 @@
<p>给你一个大小为 <code>m x n</code> 、下标从 <strong>0</strong> 开始的二维矩阵 <code>mat</code> 。在每个单元格,你可以按以下方式生成数字:</p>
<ul>
<li>最多有 <code>8</code> 条路径可以选择:东,东南,南,西南,西,西北,北,东北。</li>
<li>选择其中一条路径,沿着这个方向移动,并且将路径上的数字添加到正在形成的数字后面。</li>
<li>注意,每一步都会生成数字,例如,如果路径上的数字是 <code>1, 9, 1</code>,那么在这个方向上会生成三个数字:<code>1, 19, 191</code></li>
</ul>
<p>返回在遍历矩阵所创建的所有数字中,出现频率最高的、<strong>大于</strong> <code>10</code><span data-keyword="prime-number">质数</span>;如果不存在这样的质数,则返回 <code>-1</code><em> </em>。如果存在多个出现频率最高的质数,那么返回其中最大的那个。</p>
<p><strong>注意:</strong>移动过程中不允许改变方向。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<strong><img alt="" src="https://assets.leetcode.com/uploads/2024/02/15/south" style="width: 641px; height: 291px;" /> </strong>
<pre>
<strong>
输入:</strong>mat = [[1,1],[9,9],[1,1]]
<strong>输出:</strong>19
<strong>解释:</strong>
从单元格 (0,0) 出发,有 3 个可能的方向,这些方向上可以生成的大于 10 的数字有:
东方向: [11], 东南方向: [19], 南方向: [19,191] 。
从单元格 (0,1) 出发,所有可能方向上生成的大于 10 的数字有:[19,191,19,11] 。
从单元格 (1,0) 出发,所有可能方向上生成的大于 10 的数字有:[99,91,91,91,91] 。
从单元格 (1,1) 出发,所有可能方向上生成的大于 10 的数字有:[91,91,99,91,91] 。
从单元格 (2,0) 出发,所有可能方向上生成的大于 10 的数字有:[11,19,191,19] 。
从单元格 (2,1) 出发,所有可能方向上生成的大于 10 的数字有:[11,19,19,191] 。
在所有生成的数字中,出现频率最高的质数是 19 。</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<strong>输入:</strong>mat = [[7]]
<strong>输出:</strong>-1
<strong>解释:</strong>唯一可以生成的数字是 7 。它是一个质数,但不大于 10 ,所以返回 -1 。</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<strong>输入:</strong>mat = [[9,7,8],[4,6,5],[2,8,6]]
<strong>输出:</strong>97
<strong>解释:</strong>
从单元格 (0,0) 出发,所有可能方向上生成的大于 10 的数字有: [97,978,96,966,94,942] 。
从单元格 (0,1) 出发,所有可能方向上生成的大于 10 的数字有: [78,75,76,768,74,79] 。
从单元格 (0,2) 出发,所有可能方向上生成的大于 10 的数字有: [85,856,86,862,87,879] 。
从单元格 (1,0) 出发,所有可能方向上生成的大于 10 的数字有: [46,465,48,42,49,47] 。
从单元格 (1,1) 出发,所有可能方向上生成的大于 10 的数字有: [65,66,68,62,64,69,67,68] 。
从单元格 (1,2) 出发,所有可能方向上生成的大于 10 的数字有: [56,58,56,564,57,58] 。
从单元格 (2,0) 出发,所有可能方向上生成的大于 10 的数字有: [28,286,24,249,26,268] 。
从单元格 (2,1) 出发,所有可能方向上生成的大于 10 的数字有: [86,82,84,86,867,85] 。
从单元格 (2,2) 出发,所有可能方向上生成的大于 10 的数字有: [68,682,66,669,65,658] 。
在所有生成的数字中,出现频率最高的质数是 97 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>m == mat.length</code></li>
<li><code>n == mat[i].length</code></li>
<li><code>1 &lt;= m, n &lt;= 6</code></li>
<li><code>1 &lt;= mat[i][j] &lt;= 9</code></li>
</ul>

View File

@@ -0,0 +1,42 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始长度为 <code>n</code>&nbsp;的整数数组&nbsp;<code>nums</code>&nbsp;,和一个下标从 <code>0</code>&nbsp;开始长度为 <code>m</code>&nbsp;的整数数组&nbsp;<code>pattern</code>&nbsp;<code>pattern</code>&nbsp;数组只包含整数&nbsp;<code>-1</code>&nbsp;<code>0</code>&nbsp;&nbsp;<code>1</code>&nbsp;</p>
<p>大小为 <code>m + 1</code>&nbsp;<span data-keyword="subarray">子数组</span>&nbsp;<code>nums[i..j]</code>&nbsp;如果对于每个元素 <code>pattern[k]</code>&nbsp;都满足以下条件,那么我们说这个子数组匹配模式数组&nbsp;<code>pattern</code>&nbsp;</p>
<ul>
<li>如果 <code>pattern[k] == 1</code> ,那么 <code>nums[i + k + 1] &gt; nums[i + k]</code></li>
<li>如果&nbsp;<code>pattern[k] == 0</code>&nbsp;,那么&nbsp;<code>nums[i + k + 1] == nums[i + k]</code></li>
<li>如果&nbsp;<code>pattern[k] == -1</code>&nbsp;,那么&nbsp;<code>nums[i + k + 1] &lt; nums[i + k]</code></li>
</ul>
<p>请你返回匹配 <code>pattern</code>&nbsp;<code>nums</code>&nbsp;子数组的 <strong>数目</strong>&nbsp;</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>nums = [1,2,3,4,5,6], pattern = [1,1]
<b>输出:</b>4
<b>解释:</b>模式 [1,1] 说明我们要找的子数组是长度为 3 且严格上升的。在数组 nums 中,子数组 [1,2,3] [2,3,4] [3,4,5] 和 [4,5,6] 都匹配这个模式。
所以 nums 中总共有 4 个子数组匹配这个模式。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>nums = [1,4,4,1,3,5,5,3], pattern = [1,0,-1]
<b>输出:</b>2
<strong>解释:</strong>这里,模式数组 [1,0,-1] 说明我们需要找的子数组中,第一个元素小于第二个元素,第二个元素等于第三个元素,第三个元素大于第四个元素。在 nums 中,子数组 [1,4,4,1] 和 [3,5,5,3] 都匹配这个模式。
所以 nums 中总共有 2 个子数组匹配这个模式。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= n == nums.length &lt;= 100</code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
<li><code>1 &lt;= m == pattern.length &lt; n</code></li>
<li><code>-1 &lt;= pattern[i] &lt;= 1</code></li>
</ul>

View File

@@ -0,0 +1,42 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始长度为 <code>n</code>&nbsp;的整数数组&nbsp;<code>nums</code>&nbsp;,和一个下标从 <code>0</code>&nbsp;开始长度为 <code>m</code>&nbsp;的整数数组&nbsp;<code>pattern</code>&nbsp;<code>pattern</code>&nbsp;数组只包含整数&nbsp;<code>-1</code>&nbsp;<code>0</code>&nbsp;&nbsp;<code>1</code>&nbsp;</p>
<p>大小为 <code>m + 1</code>&nbsp;<span data-keyword="subarray">子数组</span>&nbsp;<code>nums[i..j]</code>&nbsp;如果对于每个元素 <code>pattern[k]</code>&nbsp;都满足以下条件,那么我们说这个子数组匹配模式数组&nbsp;<code>pattern</code>&nbsp;</p>
<ul>
<li>如果 <code>pattern[k] == 1</code> ,那么 <code>nums[i + k + 1] &gt; nums[i + k]</code></li>
<li>如果&nbsp;<code>pattern[k] == 0</code>&nbsp;,那么&nbsp;<code>nums[i + k + 1] == nums[i + k]</code></li>
<li>如果&nbsp;<code>pattern[k] == -1</code>&nbsp;,那么&nbsp;<code>nums[i + k + 1] &lt; nums[i + k]</code></li>
</ul>
<p>请你返回匹配 <code>pattern</code>&nbsp;<code>nums</code>&nbsp;子数组的 <strong>数目</strong>&nbsp;</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>nums = [1,2,3,4,5,6], pattern = [1,1]
<b>输出:</b>4
<b>解释:</b>模式 [1,1] 说明我们要找的子数组是长度为 3 且严格上升的。在数组 nums 中,子数组 [1,2,3] [2,3,4] [3,4,5] 和 [4,5,6] 都匹配这个模式。
所以 nums 中总共有 4 个子数组匹配这个模式。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>nums = [1,4,4,1,3,5,5,3], pattern = [1,0,-1]
<b>输出:</b>2
<strong>解释:</strong>这里,模式数组 [1,0,-1] 说明我们需要找的子数组中,第一个元素小于第二个元素,第二个元素等于第三个元素,第三个元素大于第四个元素。在 nums 中,子数组 [1,4,4,1] 和 [3,5,5,3] 都匹配这个模式。
所以 nums 中总共有 2 个子数组匹配这个模式。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= n == nums.length &lt;= 10<sup>6</sup></code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
<li><code>1 &lt;= m == pattern.length &lt; n</code></li>
<li><code>-1 &lt;= pattern[i] &lt;= 1</code></li>
</ul>

View File

@@ -0,0 +1,57 @@
<p>给你一个下标从 <strong>0</strong> 开始的字符串数组 <code>words</code> ,数组的长度为 <code>n</code> ,且包含下标从 <strong>0</strong> 开始的若干字符串。</p>
<p>你可以执行以下操作 <strong>任意 </strong>次数(<strong>包括零次</strong></p>
<ul>
<li>选择整数<code>i</code><code>j</code><code>x</code><code>y</code>,满足<code>0 &lt;= i, j &lt; n</code><code>0 &lt;= x &lt; words[i].length</code><code>0 &lt;= y &lt; words[j].length</code><strong>交换 </strong>字符 <code>words[i][x]</code><code>words[j][y]</code></li>
</ul>
<p>返回一个整数,表示在执行一些操作后,<code>words</code> 中可以包含的回文字符串的 <strong>最大 </strong>数量。</p>
<p><strong>注意:</strong>在操作过程中,<code>i</code><code>j</code> 可以相等。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<strong>输入:</strong>words = ["abbb","ba","aa"]
<strong>输出:</strong>3
<strong>解释:</strong>在这个例子中,获得最多回文字符串的一种方式是:
选择 i = 0, j = 1, x = 0, y = 0交换 words[0][0] 和 words[1][0] 。words 变成了 ["bbbb","aa","aa"] 。
words 中的所有字符串都是回文。
因此,可实现的回文字符串的最大数量是 3 。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<strong>输入:</strong>words = ["abc","ab"]
<strong>输出:</strong>2
<strong>解释:</strong>在这个例子中,获得最多回文字符串的一种方式是:
选择 i = 0, j = 1, x = 1, y = 0交换 words[0][1] 和 words[1][0] 。words 变成了 ["aac","bb"] 。
选择 i = 0, j = 0, x = 1, y = 2交换 words[0][1] 和 words[0][2] 。words 变成了 ["aca","bb"] 。
两个字符串都是回文 。
因此,可实现的回文字符串的最大数量是 2。
</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<strong>输入:</strong>words = ["cd","ef","a"]
<strong>输出:</strong>1
<strong>解释:</strong>在这个例子中,没有必要执行任何操作。
words 中有一个回文 "a" 。
可以证明,在执行任何次数操作后,无法得到更多回文。
因此,答案是 1 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= words.length &lt;= 1000</code></li>
<li><code>1 &lt;= words[i].length &lt;= 100</code></li>
<li><code>words[i]</code> 仅由小写英文字母组成。</li>
</ul>

View File

@@ -0,0 +1,41 @@
<p>给你两个 <strong>正整数 </strong>数组 <code>arr1</code><code>arr2</code></p>
<p>正整数的 <strong>前缀 </strong>是其 <strong>最左边 </strong>的一位或多位数字组成的整数。例如,<code>123</code> 是整数 <code>12345</code> 的前缀,而 <code>234</code><strong> 不是 </strong></p>
<p>设若整数 <code>c</code> 是整数 <code>a</code><code>b</code><strong> 公共前缀 </strong>,那么 <code>c</code> 需要同时是 <code>a</code><code>b</code> 的前缀。例如,<code>5655359</code><code>56554</code> 有公共前缀 <code>565</code> ,而 <code>1223</code><code>43456</code><strong> 没有 </strong>公共前缀。</p>
<p>你需要找出属于 <code>arr1</code> 的整数 <code>x</code> 和属于 <code>arr2</code> 的整数 <code>y</code> 组成的所有数对 <code>(x, y)</code> 之中最长的公共前缀的长度。</p>
<p>返回所有数对之中最长公共前缀的长度。如果它们之间不存在公共前缀,则返回 <code>0</code></p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<strong>输入:</strong>arr1 = [1,10,100], arr2 = [1000]
<strong>输出:</strong>3
<strong>解释:</strong>存在 3 个数对 (arr1[i], arr2[j])
- (1, 1000) 的最长公共前缀是 1 。
- (10, 1000) 的最长公共前缀是 10 。
- (100, 1000) 的最长公共前缀是 100 。
最长的公共前缀是 100 ,长度为 3 。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<strong>输入:</strong>arr1 = [1,2,3], arr2 = [4,4,4]
<strong>输出:</strong>0
<strong>解释:</strong>任何数对 (arr1[i], arr2[j]) 之中都不存在公共前缀,因此返回 0 。
请注意,同一个数组内元素之间的公共前缀不在考虑范围内。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= arr1.length, arr2.length &lt;= 5 * 10<sup>4</sup></code></li>
<li><code>1 &lt;= arr1[i], arr2[i] &lt;= 10<sup>8</sup></code></li>
</ul>

View File

@@ -0,0 +1,42 @@
<p>给你一个整数数组&nbsp;<code>nums</code>&nbsp;,如果&nbsp;<code>nums</code>&nbsp;<strong>至少</strong>&nbsp;包含&nbsp;<code>2</code>&nbsp;个元素,你可以执行以下操作:</p>
<ul>
<li>选择 <code>nums</code>&nbsp;中的前两个元素并将它们删除。</li>
</ul>
<p>一次操作的 <strong>分数</strong>&nbsp;是被删除元素的和。</p>
<p>在确保<strong>&nbsp;所有操作分数相同</strong>&nbsp;的前提下,请你求出 <strong>最多</strong>&nbsp;能进行多少次操作。</p>
<p>请你返回按照上述要求 <strong>最多</strong>&nbsp;可以进行的操作次数。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>nums = [3,2,1,4,5]
<b>输出:</b>2
<b>解释:</b>我们执行以下操作:
- 删除前两个元素,分数为 3 + 2 = 5 nums = [1,4,5] 。
- 删除前两个元素,分数为 1 + 4 = 5 nums = [5] 。
由于只剩下 1 个元素,我们无法继续进行任何操作。</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>nums = [3,2,6,1,4]
<b>输出:</b>1
<b>解释:</b>我们执行以下操作:
- 删除前两个元素,分数为 3 + 2 = 5 nums = [6,1,4] 。
由于下一次操作的分数与前一次不相等,我们无法继续进行任何操作。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= nums.length &lt;= 100</code></li>
<li><code>1 &lt;= nums[i] &lt;= 1000</code></li>
</ul>

View File

@@ -0,0 +1,47 @@
<p>给你一个整数数组&nbsp;<code>nums</code>&nbsp;,如果&nbsp;<code>nums</code>&nbsp;<strong>至少</strong>&nbsp;包含 <code>2</code>&nbsp;个元素,你可以执行以下操作中的&nbsp;<strong>任意</strong>&nbsp;一个:</p>
<ul>
<li>选择 <code>nums</code>&nbsp;中最前面两个元素并且删除它们。</li>
<li>选择 <code>nums</code>&nbsp;中最后两个元素并且删除它们。</li>
<li>选择 <code>nums</code>&nbsp;中第一个和最后一个元素并且删除它们。</li>
</ul>
<p>一次操作的&nbsp;<strong>分数</strong>&nbsp;是被删除元素的和。</p>
<p>在确保<strong>&nbsp;所有操作分数相同</strong>&nbsp;的前提下,请你求出&nbsp;<strong>最多</strong>&nbsp;能进行多少次操作。</p>
<p>请你返回按照上述要求&nbsp;<strong>最多</strong>&nbsp;可以进行的操作次数。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>nums = [3,2,1,2,3,4]
<b>输出:</b>3
<b>解释:</b>我们执行以下操作:
- 删除前两个元素,分数为 3 + 2 = 5 nums = [1,2,3,4] 。
- 删除第一个元素和最后一个元素,分数为 1 + 4 = 5 nums = [2,3] 。
- 删除第一个元素和最后一个元素,分数为 2 + 3 = 5 nums = [] 。
由于 nums 为空,我们无法继续进行任何操作。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>nums = [3,2,6,1,4]
<b>输出:</b>2
<b>解释:</b>我们执行以下操作:
- 删除前两个元素,分数为 3 + 2 = 5 nums = [6,1,4] 。
- 删除最后两个元素,分数为 1 + 4 = 5 nums = [6] 。
至多进行 2 次操作。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= nums.length &lt;= 2000</code></li>
<li><code>1 &lt;= nums[i] &lt;= 1000</code></li>
</ul>

View File

@@ -0,0 +1,53 @@
<p>给你一个下标从 <strong>0</strong> 开始的字符串数组 <code>words</code></p>
<p>定义一个 <strong>布尔 </strong>函数 <code>isPrefixAndSuffix</code> ,它接受两个字符串参数 <code>str1</code><code>str2</code> </p>
<ul>
<li><code>str1</code> 同时是 <code>str2</code> 的前缀(<span data-keyword="string-prefix">prefix</span>)和后缀(<span data-keyword="string-suffix">suffix</span>)时,<code>isPrefixAndSuffix(str1, str2)</code> 返回 <code>true</code>,否则返回 <code>false</code></li>
</ul>
<p>例如,<code>isPrefixAndSuffix("aba", "ababa")</code> 返回 <code>true</code>,因为 <code>"aba"</code> 既是 <code>"ababa"</code> 的前缀,也是 <code>"ababa"</code> 的后缀,但是 <code>isPrefixAndSuffix("abc", "abcd")</code> 返回<code> false</code></p>
<p>以整数形式,返回满足 <code>i &lt; j</code><code>isPrefixAndSuffix(words[i], words[j])</code><code>true</code> 的下标对 <code>(i, j)</code><strong> 数量 </strong></p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<strong>输入:</strong>words = ["a","aba","ababa","aa"]
<strong>输出:</strong>4
<strong>解释:</strong>在本示例中,计数的下标对包括:
i = 0 且 j = 1 ,因为 isPrefixAndSuffix("a", "aba") 为 true 。
i = 0 且 j = 2 ,因为 isPrefixAndSuffix("a", "ababa") 为 true 。
i = 0 且 j = 3 ,因为 isPrefixAndSuffix("a", "aa") 为 true 。
i = 1 且 j = 2 ,因为 isPrefixAndSuffix("aba", "ababa") 为 true 。
因此,答案是 4 。</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<strong>输入:</strong>words = ["pa","papa","ma","mama"]
<strong>输出:</strong>2
<strong>解释:</strong>在本示例中,计数的下标对包括:
i = 0 且 j = 1 ,因为 isPrefixAndSuffix("pa", "papa") 为 true 。
i = 2 且 j = 3 ,因为 isPrefixAndSuffix("ma", "mama") 为 true 。
因此,答案是 2 。</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<strong>输入:</strong>words = ["abab","ab"]
<strong>输出:</strong>0
<strong>解释:</strong>在本示例中,唯一有效的下标对是 i = 0 且 j = 1 ,但是 isPrefixAndSuffix("abab", "ab") 为 false 。
因此,答案是 0 。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= words.length &lt;= 50</code></li>
<li><code>1 &lt;= words[i].length &lt;= 10</code></li>
<li><code>words[i]</code> 仅由小写英文字母组成。</li>
</ul>

View File

@@ -0,0 +1,54 @@
<p>给你一个下标从 <strong>0</strong> 开始的字符串数组 <code>words</code></p>
<p>定义一个 <strong>布尔 </strong>函数 <code>isPrefixAndSuffix</code> ,它接受两个字符串参数 <code>str1</code><code>str2</code> </p>
<ul>
<li><code>str1</code> 同时是 <code>str2</code> 的前缀(<span data-keyword="string-prefix">prefix</span>)和后缀(<span data-keyword="string-suffix">suffix</span>)时,<code>isPrefixAndSuffix(str1, str2)</code> 返回 <code>true</code>,否则返回 <code>false</code></li>
</ul>
<p>例如,<code>isPrefixAndSuffix("aba", "ababa")</code> 返回 <code>true</code>,因为 <code>"aba"</code> 既是 <code>"ababa"</code> 的前缀,也是 <code>"ababa"</code> 的后缀,但是 <code>isPrefixAndSuffix("abc", "abcd")</code> 返回<code> false</code></p>
<p>以整数形式,返回满足 <code>i &lt; j</code><code>isPrefixAndSuffix(words[i], words[j])</code><code>true</code> 的下标对 <code>(i, j)</code><strong> 数量 </strong></p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<strong>输入:</strong>words = ["a","aba","ababa","aa"]
<strong>输出:</strong>4
<strong>解释:</strong>在本示例中,计数的下标对包括:
i = 0 且 j = 1 ,因为 isPrefixAndSuffix("a", "aba") 为 true 。
i = 0 且 j = 2 ,因为 isPrefixAndSuffix("a", "ababa") 为 true 。
i = 0 且 j = 3 ,因为 isPrefixAndSuffix("a", "aa") 为 true 。
i = 1 且 j = 2 ,因为 isPrefixAndSuffix("aba", "ababa") 为 true 。
因此,答案是 4 。</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<strong>输入:</strong>words = ["pa","papa","ma","mama"]
<strong>输出:</strong>2
<strong>解释:</strong>在本示例中,计数的下标对包括:
i = 0 且 j = 1 ,因为 isPrefixAndSuffix("pa", "papa") 为 true 。
i = 2 且 j = 3 ,因为 isPrefixAndSuffix("ma", "mama") 为 true 。
因此,答案是 2 。</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<strong>输入:</strong>words = ["abab","ab"]
<strong>输出:</strong>0
<strong>解释:</strong>在本示例中,唯一有效的下标对是 i = 0 且 j = 1 ,但是 isPrefixAndSuffix("abab", "ab") 为 false 。
因此,答案是 0 。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= words.length &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= words[i].length &lt;= 10<sup>5</sup></code></li>
<li><code>words[i]</code> 仅由小写英文字母组成。</li>
<li>所有 <code>words[i]</code> 的长度之和不超过 <code>5 * 10<sup>5</sup></code></li>
</ul>

View File

@@ -0,0 +1,42 @@
<p>给你一个字符串&nbsp;<code>s</code>&nbsp;</p>
<p>请你进行以下操作直到 <code>s</code>&nbsp;<strong></strong>&nbsp;</p>
<ul>
<li>每次操作 <strong>依次</strong> 遍历 <code>'a'</code><code>'z'</code>,如果当前字符出现在 <code>s</code> 中,那么删除出现位置&nbsp;<strong>最早</strong>&nbsp;的该字符。</li>
</ul>
<p>请你返回进行 <strong>最后</strong>&nbsp;一次操作 <strong>之前</strong>&nbsp;的字符串<em>&nbsp;</em><code>s</code><em>&nbsp;</em></p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>s = "aabcbbca"
<b>输出:</b>"ba"
<b>解释:</b>我们进行以下操作:
- 删除 s = "<em><strong>a</strong></em>a<em><strong>bc</strong></em>bbca" 中加粗加斜字符,得到字符串 s = "abbca" 。
- 删除 s = "<em><strong>ab</strong></em>b<em><strong>c</strong></em>a" 中加粗加斜字符,得到字符串 s = "ba" 。
- 删除 s = "<em><strong>ba</strong></em>" 中加粗加斜字符,得到字符串 s = "" 。
进行最后一次操作之前的字符串为 "ba" 。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>s = "abcd"
<b>输出:</b>"abcd"
<b>解释:</b>我们进行以下操作:
- 删除 s = "<em><strong>abcd</strong></em>" 中加粗加斜字符,得到字符串 s = "" 。
进行最后一次操作之前的字符串为 "abcd" 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length &lt;= 5 * 10<sup>5</sup></code></li>
<li><code>s</code>&nbsp;只包含小写英文字母。</li>
</ul>