Palindrome Pairs
Trie, HashMap, String
Hard
Given a list of unique words, find all pairs of distinct indices(i, j)in the given list, so that the concatenation of the two words, i.e.words[i] + words[j]is a palindrome.
Example 1:
Input: ["abcd","dcba","lls","s","sssll"]
Output: [[0,1],[1,0],[3,2],[2,4]]
Explanation:
The palindromes are ["dcbaabcd","abcddcba","slls","llssssll"]Example 2:
Input: ["bat","tab","cat"]
Output: [[0,1],[1,0]]
Explanation:
The palindromes are ["battab","tabbat"]Solution & Analysis
Brute-force (Almost TLE, 3101 ms, 2.99%)
class Solution {
public List<List<Integer>> palindromePairs(String[] words) {
List<List<Integer>> ans = new ArrayList<>();
int n = words.length;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (j == i) {
continue;
}
String candidate = words[i] + words[j];
if (isPalindrome(candidate)) {
List<Integer> tmp = new ArrayList<>();
tmp.add(i);
tmp.add(j);
ans.add(tmp);
}
}
}
return ans;
}
boolean isPalindrome(String s) {
if (s.length() < 2) {
return true;
}
int i = 0;
int j = s.length() - 1;
while (i < j) {
if (s.charAt(i) != s.charAt(j)) {
return false;
}
i++;
j--;
}
return true;
}
}Trie
Reference
Last updated
Was this helpful?