Leet 代码 — 2744. 求最大字符串对数

Q神日志 2023-09-02 08:52:39

这是一个简单的问题,描述如下:

给您一个由不同字符串组成的 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%。

更简单、更快、开门见山,如果你想让它更具可读性,你可以用解释更多过程的方法来替换条件。

...全文
200 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

6

社区成员

发帖
与我相关
我的任务
社区描述
分享
java-rocketmqpygame前端 个人社区 广东省·广州市
社区管理员
  • Q shen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧