Advertisement
ogv

Untitled

ogv
Oct 22nd, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.92 KB | None | 0 0
  1. class Solution {
  2.     private char[][] w;
  3.     TrieNode trie = new TrieNode();
  4.        
  5.     public List<List<Integer>> palindromePairs(String[] words) {
  6.         w = new char[words.length][];
  7.         for (int i = 0; i < words.length; i++) w[i] = words[i].toCharArray();        
  8.        
  9.         for (int i = 0; i < w.length; i++) {
  10.             TrieNode node = trie;
  11.             for (int j = 0; j < w[i].length; j++) {
  12.                 if (isPali(i, j, w[i].length - 1)) node.words.add(i);            
  13.                 node = node.getNext(w[i][j]);  
  14.             }
  15.             node.words.add(i);
  16.             node.endWord = i;  
  17.         }
  18.        
  19.         List<List<Integer>> result = new ArrayList<List<Integer>>();
  20.        
  21.         for (int i = 0; i < w.length; i++) {
  22.             TrieNode node = trie;
  23.             for (int j = w[i].length - 1; j >= 0 && node != null; j--) {
  24.                 if (node.endWord != -1 && node.endWord != i && isPali(i, 0, j))
  25.                     result.add(Arrays.asList(node.endWord, i));
  26.                
  27.                 node = node.getNext(w[i][j]);
  28.             }
  29.             if (node == null) continue;
  30.            
  31.             for (int wordIndex: node.words)
  32.                 if (wordIndex != i) result.add(Arrays.asList(wordIndex, i));
  33.         }
  34.                
  35.         return result;
  36.     }
  37.    
  38.     private boolean isPali(int i, int l, int r) {
  39.         while (l < r)
  40.             if (w[i][l++] != w[i][r--]) return false;
  41.        
  42.         return true;
  43.     }
  44.    
  45.     class TrieNode {
  46.         public List<Integer> words = new ArrayList<>();
  47.         public Map<Character, TrieNode> next= new HashMap<>();
  48.         public int endWord = -1;
  49.        
  50.         public TrieNode getNext(char c) {
  51.             TrieNode n = next.get(c);
  52.             if (n == null) {
  53.                 n = new TrieNode();
  54.                 next.put(c, n);
  55.             }
  56.             return n;
  57.         }
  58.     }  
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement