Leetcode Palindrome Pairs
来源:互联网 发布:哪个搜索软件好 编辑:程序博客网 时间:2024/04/20 10:02
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:
Given words
= ["bat", "tab", "cat"]
Return [[0, 1], [1, 0]]
The palindromes are ["battab", "tabbat"]
Example 2:
Given words
= ["abcd", "dcba", "lls", "s", "sssll"]
Return [[0, 1], [1, 0], [3, 2], [2, 4]]
The palindromes are ["dcbaabcd", "abcddcba", "slls", "llssssll"]
Difficulty: Hard
Solution: Use Trie.
public class Solution { Node root = new Node(); public void insert(String s, int index){ Node curr = root; for(int i = s.length() - 1; i >= 0; i--){ if(curr.next[s.charAt(i)- 'a'] == null){ curr.next[s.charAt(i)- 'a'] = new Node(); } if(isPal(s ,0, i)){ curr.list.add(index); } curr = curr.next[s.charAt(i)- 'a']; } curr.list.add(index); curr.index = index; } public void search(String[] words, int i, List<List<Integer>> list) { Node curr = root; for (int j = 0; j < words[i].length(); j++) { if (curr.index >= 0 && curr.index != i && isPal(words[i], j, words[i].length() - 1)) { list.add(Arrays.asList(i, curr.index)); } curr = curr.next[words[i].charAt(j) - 'a']; if (curr == null) return; } for (int j : curr.list) { if (i == j) continue; list.add(Arrays.asList(i, j)); } } public boolean isPal(String word, int i, int j){ while (i < j) { if (word.charAt(i++) != word.charAt(j--)) return false; } return true; } public List<List<Integer>> palindromePairs(String[] words) { List<List<Integer>> res = new ArrayList<>(); for (int i = 0; i < words.length; i++) { insert(words[i],i); } for (int i = 0; i < words.length; i++) { search(words, i, res); } return res; }}class Node{ int index; List<Integer> list; Node[] next; Node(){ index = -1; next = new Node[26]; list = new ArrayList<Integer>(); }}
0 0
- [LeetCode]Palindrome Pairs
- LeetCode: Palindrome Pairs
- LeetCode 336. Palindrome Pairs
- LeetCode 336. Palindrome Pairs
- LeetCode Palindrome Pairs
- leetcode 336. Palindrome Pairs
- 【leetcode】Palindrome Pairs
- [LeetCode] Palindrome Pairs
- LeetCode 336. Palindrome Pairs
- LeetCode No336. Palindrome Pairs
- leetcode.336. Palindrome Pairs
- Leetcode Palindrome Pairs
- [leetcode] 336. Palindrome Pairs
- 【Leetcode】Palindrome Pairs
- LeetCode-336.Palindrome Pairs
- LeetCode 336. Palindrome Pairs
- Leetcode Palindrome Pairs
- [LeetCode]336. Palindrome Pairs
- 45、JavaScript的运动----链式运动----回调函数fn参数的添加
- 剑指offer|数字在排序数组中出现的次数
- 服务端入门《六》(gdb 调试例子)
- 第五章 处理器拦截器详解——跟着开涛学SpringMVC
- FP-growth算法流程
- Leetcode Palindrome Pairs
- 一个炫酷的对话框依赖库
- 推挽结构详解
- Java多线程 之 ThreadPoolExecutor(九)
- Android stadio 自定义debug release keystore
- volley网络请求保持sessionID
- Leetcode Word Pattern
- [LC260]Single Number III
- Socket相关函数解析