LeetCode 336. Palindrome Pairs

  • 对每个word,如果它翻转过来之后[:n]或者[n:]和map中已有的key相同,且剩下的一部分是palindrome,那么它们能组成palindrome
class Solution {
    public List<List<Integer>> palindromePairs(String[] words) {
        List<List<Integer>> pairs = new LinkedList<>();
        if (words == null) return pairs;
        HashMap<String, Integer> map = new HashMap<>();
        for (int i = 0; i < words.length; ++ i) map.put(words[i], i);
        for (int i = 0; i < words.length; ++ i) {
            int l = 0, r = 0;
            while (l <= r) {
                String s = words[i].substring(l, r);
                Integer j = map.get(new StringBuilder(s).reverse().toString());
                if (j != null && i != j && isPalindrome(words[i].substring(l == 0 ? r : 0, l == 0 ? words[i].length() : l)))
                    pairs.add(Arrays.asList(l == 0 ? new Integer[]{i, j} : new Integer[]{j, i}));
                if (r < words[i].length()) ++r;
                else ++l;
            }
        }
        return pairs;
    }

    private boolean isPalindrome(String s) {
        for (int i = 0; i < s.length()/2; ++ i)
            if (s.charAt(i) != s.charAt(s.length()-1-i))
                return false;
        return true;
    }
}
  • 用trie实现,就不用两次遍历这个word判断是否存在在map中
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,788评论 0 33
  • Given a list of unique words, find all pairs of distinct ...
    叶孤陈阅读 2,150评论 0 0
  • 算法思想贪心思想双指针排序快速选择堆排序桶排序荷兰国旗问题二分查找搜索BFSDFSBacktracking分治动态...
    第六象限阅读 3,339评论 0 0
  • 十八日,也是午后。 看到亲爱的发来信息时,顿时什么都不想忙了,放下手头上的事和她说了会话。 亲爱的...
    南风_7ff8阅读 270评论 0 0
  • 参加了初中的好友聚会。 说起来,三年前第一次参加聚会也算巧合。那时只有六个人,准确的说初中同学三年,我对其中的两人...
    派派派派派派阅读 609评论 0 1