6
社区成员
发帖
与我相关
我的任务
分享这是一个简单的问题,描述如下:
给您一个由不同字符串组成的 0 索引数组单词。
字符串words[i]可以与字符串words[j]配对,如果:
字符串words[i]等于反转后的字符串words[j]。
0 <= i < j < 单词长度。
返回可以从数组单词形成的最大对数。
请注意,每个字符串最多属于一对。
示例 1:
输入:words = ["cd","ac","dc","ca","zz"]输出:2
解释:在本例中,我们可以通过以下方式形成 2 对字符串:
- 我们将第 0 个字符串与第 2 个字符串配对,因为 word[0] 的反转字符串是“dc”并且等于 Words[2]。
- 我们将第一个字符串与第三个字符串配对,因为 word[1] 的反转字符串是“ca”并且等于words[3]。可以证明2是可以形成的最大对数。
示例 2:
输入:words = ["ab","ba","cc"]输出:1
解释:在本例中,我们可以通过以下方式形成 1 对字符串:
- 我们将第 0 个字符串与第 1 个字符串配对,因为words[1]的反转字符串是“ab”并且等于words[0]。可以证明1是可以形成的最大对数。
示例 3:
输入:words = ["aa","ab"]输出:0
解释:在此示例中,我们无法形成任何字符串对。限制条件:
1 <=words.length<=50words
[i].length==2 个
单词由不同的字符串组成。
Words[i] 仅包含小写英文字母。
完成此操作的一种方法是两次迭代,第一次迭代遍历每个单词,然后从单词中反转并与其余单词进行比较,例如:
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">class</span> <span style="color:var(--syntax-name-color)">Solution</span> <span style="color:var(--syntax-error-color)">{</span>
<span style="color:var(--syntax-declaration-color)">public</span> <span style="color:var(--syntax-declaration-color)">int</span> <span style="color:var(--syntax-name-color)">maximumNumberOfStringPairs</span><span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-name-color)">String</span><span style="color:var(--syntax-error-color)">[]</span> <span style="color:var(--syntax-text-color)">words</span><span style="color:var(--syntax-error-color)">)</span> <span style="color:var(--syntax-error-color)">{</span>
<span style="color:var(--syntax-declaration-color)">int</span> <span style="color:var(--syntax-text-color)">maxPairs</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-error-color)">;</span>
<span style="color:var(--syntax-declaration-color)">for</span><span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-declaration-color)">int</span> <span style="color:var(--syntax-text-color)">i</span><span style="color:var(--syntax-error-color)">=</span><span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-error-color)">;</span><span style="color:var(--syntax-text-color)">i</span><span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-text-color)">words</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-name-color)">length</span><span style="color:var(--syntax-error-color)">;</span><span style="color:var(--syntax-text-color)">i</span><span style="color:var(--syntax-error-color)">++){</span>
<span style="color:var(--syntax-declaration-color)">final</span> <span style="color:var(--syntax-name-color)">String</span> <span style="color:var(--syntax-text-color)">word</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">words</span><span style="color:var(--syntax-error-color)">[</span><span style="color:var(--syntax-text-color)">i</span><span style="color:var(--syntax-error-color)">];</span>
<span style="color:var(--syntax-declaration-color)">final</span> <span style="color:var(--syntax-name-color)">String</span> <span style="color:var(--syntax-text-color)">wordReversed</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">word</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-name-color)">charAt</span><span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-error-color)">)</span> <span style="color:var(--syntax-error-color)">+</span> <span style="color:var(--syntax-string-color)">""</span> <span style="color:var(--syntax-error-color)">+</span> <span style="color:var(--syntax-text-color)">word</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-name-color)">charAt</span><span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-error-color)">);</span>
<span style="color:var(--syntax-declaration-color)">for</span><span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-declaration-color)">int</span> <span style="color:var(--syntax-text-color)">j</span><span style="color:var(--syntax-error-color)">=(</span><span style="color:var(--syntax-text-color)">i</span><span style="color:var(--syntax-error-color)">+</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-error-color)">);</span><span style="color:var(--syntax-text-color)">j</span><span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-text-color)">words</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-name-color)">length</span><span style="color:var(--syntax-error-color)">;</span><span style="color:var(--syntax-text-color)">j</span><span style="color:var(--syntax-error-color)">++){</span>
<span style="color:var(--syntax-declaration-color)">if</span><span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-text-color)">words</span><span style="color:var(--syntax-error-color)">[</span><span style="color:var(--syntax-text-color)">j</span><span style="color:var(--syntax-error-color)">].</span><span style="color:var(--syntax-name-color)">equals</span><span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-text-color)">wordReversed</span><span style="color:var(--syntax-error-color)">))</span> <span style="color:var(--syntax-error-color)">{</span>
<span style="color:var(--syntax-text-color)">maxPairs</span><span style="color:var(--syntax-error-color)">++;</span>
<span style="color:var(--syntax-error-color)">}</span>
<span style="color:var(--syntax-error-color)">}</span>
<span style="color:var(--syntax-error-color)">}</span>
<span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-text-color)">maxPairs</span><span style="color:var(--syntax-error-color)">;</span>
<span style="color:var(--syntax-error-color)">}</span>
<span style="color:var(--syntax-error-color)">}</span>
</code></span></span>
运行时间:8 毫秒,比 Java 在线提交的“查找最大字符串对数”的 27.17% 快。
内存使用量:42.3 MB,低于 Java 在线提交的“查找最大字符串对数”的 75.70%。
提供更好性能的一种方法是不直接创建 String 的实例和引用来进行字符比较:
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">class</span> <span style="color:var(--syntax-name-color)">Solution</span> <span style="color:var(--syntax-error-color)">{</span>
<span style="color:var(--syntax-declaration-color)">public</span> <span style="color:var(--syntax-declaration-color)">int</span> <span style="color:var(--syntax-name-color)">maximumNumberOfStringPairs</span><span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-name-color)">String</span><span style="color:var(--syntax-error-color)">[]</span> <span style="color:var(--syntax-text-color)">words</span><span style="color:var(--syntax-error-color)">)</span> <span style="color:var(--syntax-error-color)">{</span>
<span style="color:var(--syntax-declaration-color)">int</span> <span style="color:var(--syntax-text-color)">maxPairs</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-error-color)">;</span>
<span style="color:var(--syntax-declaration-color)">for</span><span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-declaration-color)">int</span> <span style="color:var(--syntax-text-color)">i</span><span style="color:var(--syntax-error-color)">=</span><span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-error-color)">;</span><span style="color:var(--syntax-text-color)">i</span><span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-text-color)">words</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-name-color)">length</span><span style="color:var(--syntax-error-color)">;</span><span style="color:var(--syntax-text-color)">i</span><span style="color:var(--syntax-error-color)">++){</span>
<span style="color:var(--syntax-declaration-color)">for</span><span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-declaration-color)">int</span> <span style="color:var(--syntax-text-color)">j</span><span style="color:var(--syntax-error-color)">=(</span><span style="color:var(--syntax-text-color)">i</span><span style="color:var(--syntax-error-color)">+</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-error-color)">);</span><span style="color:var(--syntax-text-color)">j</span><span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-text-color)">words</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-name-color)">length</span><span style="color:var(--syntax-error-color)">;</span><span style="color:var(--syntax-text-color)">j</span><span style="color:var(--syntax-error-color)">++){</span>
<span style="color:var(--syntax-declaration-color)">if</span><span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-text-color)">words</span><span style="color:var(--syntax-error-color)">[</span><span style="color:var(--syntax-text-color)">i</span><span style="color:var(--syntax-error-color)">].</span><span style="color:var(--syntax-name-color)">charAt</span><span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-error-color)">)</span> <span style="color:var(--syntax-error-color)">==</span> <span style="color:var(--syntax-text-color)">words</span><span style="color:var(--syntax-error-color)">[</span><span style="color:var(--syntax-text-color)">j</span><span style="color:var(--syntax-error-color)">].</span><span style="color:var(--syntax-name-color)">charAt</span><span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-error-color)">)</span> <span style="color:var(--syntax-error-color)">&&</span> <span style="color:var(--syntax-text-color)">words</span><span style="color:var(--syntax-error-color)">[</span><span style="color:var(--syntax-text-color)">i</span><span style="color:var(--syntax-error-color)">].</span><span style="color:var(--syntax-name-color)">charAt</span><span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-error-color)">)</span> <span style="color:var(--syntax-error-color)">==</span> <span style="color:var(--syntax-text-color)">words</span><span style="color:var(--syntax-error-color)">[</span><span style="color:var(--syntax-text-color)">j</span><span style="color:var(--syntax-error-color)">].</span><span style="color:var(--syntax-name-color)">charAt</span><span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-error-color)">))</span> <span style="color:var(--syntax-error-color)">{</span>
<span style="color:var(--syntax-text-color)">maxPairs</span><span style="color:var(--syntax-error-color)">++;</span>
<span style="color:var(--syntax-error-color)">}</span>
<span style="color:var(--syntax-error-color)">}</span>
<span style="color:var(--syntax-error-color)">}</span>
<span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-text-color)">maxPairs</span><span style="color:var(--syntax-error-color)">;</span>
<span style="color:var(--syntax-error-color)">}</span>
<span style="color:var(--syntax-error-color)">}</span>
</code></span></span>
运行时间:1 毫秒,比 100.00% Java 在线提交的查找最大字符串对数快。
内存使用量:41.6 MB,低于 Java 在线提交的“查找最大字符串对数”的 79.74%。
更简单、更快、开门见山,如果你想让它更具可读性,你可以用解释更多过程的方法来替换条件。