0336:回文对(★★)
目录
题目
给定一个由唯一字符串构成的 0 索引 数组 words
。
回文对 是一对整数 (i, j)
,满足以下条件:
0 <= i, j < words.length
,i != j
,并且words[i] + words[j]
(两个字符串的连接)是一个回文串。
返回一个数组,它包含 words
中所有满足 回文对 条件的字符串。
你必须设计一个时间复杂度为 O(sum of words[i].length)
的算法。
示例 1:
输入:words = ["abcd","dcba","lls","s","sssll"]
输出:[[0,1],[1,0],[3,2],[2,4]]
解释:可拼接成的回文串为 ["dcbaabcd","abcddcba","slls","llssssll"]
示例 2:
输入:words = ["bat","tab","cat"]
输出:[[0,1],[1,0]]
解释:可拼接成的回文串为 ["battab","tabbat"]
示例 3:
输入:words = ["a",""] 输出:[[0,1],[1,0]]
提示:
1 <= words.length <= 5000
0 <= words[i].length <= 300
words[i]
由小写英文字母组成
相似问题:
分析
- 单词长度较短,因此考虑直接用单词子串去搜索
- 假设 w1+w2 是回文串,分类讨论
- w1 拆分为 a、b,b 回文,a 是 w2 的反
- w2 拆分为 a、b,a 回文,b 是 w1 的反
- 为了方便,遍历时考虑当前单词为更长的那个即可
- 注意 w1 和 w2 长度相等,或 w1/w2 为空串的特殊情况
解答
|
|
1460 ms