Problem
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"]
class Solution { public List> palindromePairs(String[] words) { List
> res = new ArrayList<>(); if (words == null || words.length == 0) return res; Map
map = new HashMap<>(); for (int i = 0; i < words.length; i++) { map.put(words[i], i); } if (map.containsKey("")) { int blankIndex = map.get(""); for (int i = 0; i < words.length; i++) { if (isPalindrome(words[i]) && i != blankIndex) { res.add(Arrays.asList(blankIndex, i)); res.add(Arrays.asList(i, blankIndex)); } } } for (int i = 0; i < words.length; i++) { String reversed = new StringBuilder(words[i]).reverse().toString(); if (map.containsKey(reversed)) { int index = map.get(reversed); if (index != i) { res.add(Arrays.asList(i, index)); } } } for (int i = 0; i < words.length; i++) { String word = words[i]; for (int j = 1; j < word.length(); j++) { if (isPalindrome(word.substring(0, j))) { String reversed = new StringBuilder(word.substring(j)).reverse().toString(); if (map.containsKey(reversed)) { int index = map.get(reversed); if (index != i) { res.add(Arrays.asList(index, i)); } } } if (isPalindrome(word.substring(j))) { String reversed = new StringBuilder(word.substring(0, j)).reverse().toString(); if (map.containsKey(reversed)) { int index = map.get(reversed); if (index != i) { res.add(Arrays.asList(i, index)); } } } } } return res; } private boolean isPalindrome(String word) { if (word == null || word.length() <= 1) return true; int i = 0, j = word.length()-1; while (i < j) { if (word.charAt(i) != word.charAt(j)) return false; i++; j--; } return true; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/72276.html
摘要:描述給定一組唯一的單詞,找出所有不同的索引對,使得列表中的兩個單詞,,可拼接成回文串。遍歷每一個單詞,對每一個單詞進(jìn)行切片,組成和。 Description Given a list of unique words, find all pairs of distinct indices (i, j) in the given list, so that the concatenatio...
摘要:容易出的兩個地方以為例。這兩個互為的在尾部加上也就是在頭部加上所以后部分不能為空,否則就和頭部為空的情況重復(fù)了。空間復(fù)雜度因為用了額外的來儲存,需要空間。時間復(fù)雜度每個分為兩個部分,調(diào)用前后兩部分總長度為所以每次調(diào)用為一共次。 Given a list of unique words, find all pairs of distinct indices (i, j) in the g...
摘要:和的區(qū)別是,所以對于,效率更高不允許作為鍵值,而允許一個鍵和無限個值有一個,叫,便于查詢可預(yù)測的迭代順序。這道題依然選擇的話 Problem Given a list of unique words. Find all pairs of distinct indices (i, j) in the given list, so that the concatenation of the...
摘要:部分是回文的,在里面找是否有的。這里的范圍是,最小是,因為要保證是兩個單詞,最大是,這時候要找出另一個和他相反的串。判斷為回文,可以直接暴力,每個都判斷一次。兩個方向都找一遍就可能出現(xiàn)重復(fù)的情況,注意避免重復(fù)。例如,結(jié)果應(yīng)該是。 Palindrome Pairs 鏈接:https://leetcode.com/problems... 這道題沒想出來思路,參考了這個博客的內(nèi)容:http:...
摘要:前言從開始寫相關(guān)的博客到現(xiàn)在也蠻多篇了。而且當(dāng)時也沒有按順序?qū)懍F(xiàn)在翻起來覺得蠻亂的。可能大家看著也非常不方便。所以在這里做個索引嘻嘻。順序整理更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新 前言 從開始寫leetcode相關(guān)的博客到現(xiàn)在也蠻多篇了。而且當(dāng)時也沒有按順序?qū)憽F(xiàn)在翻起來覺得蠻亂的。可能大家看著也非常不方便。所以在這里做個索引嘻嘻。 順序整理 1~50 1...
閱讀 782·2023-04-25 17:33
閱讀 3632·2021-07-29 14:49
閱讀 2485·2019-08-30 15:53
閱讀 3439·2019-08-29 16:27
閱讀 2004·2019-08-29 16:11
閱讀 1035·2019-08-29 14:17
閱讀 2440·2019-08-29 13:47
閱讀 2022·2019-08-29 13:28