public class Solution {
public List<List<Integer>> palindromePairs(String[] words) {
List<Integer> list = new ArrayList<>();
List<List<Integer>> twoList = new ArrayList<>();
Set twoSet = new HashSet<List<Integer>>();
HashMap<String,Integer> hm = new HashMap<>();
int i=0;
for (String word:words){
hm.put(word,i);
i++;
}
for (i=0;i<words.length;i++){
for (int j=0;j<=words[i].length();j++){
//StringBuffer是用来逆转字符串的
StringBuffer firstStr = new StringBuffer();
StringBuffer secondStr = new StringBuffer();
String first = words[i].substring(0,j);
String second = words[i].substring(j);
if (isPalindrome(first)){//如果这个first是回文字,那么只需要second逆转一下,放到first的前面既可。
firstStr.append(second);
String str = firstStr.reverse().toString();
if(hm.containsKey(str)&&(i!=hm.get(str))){
//当i==hm.get(str),说明他整个都是回文字,会产生如[3,3]这样重复的列表,直接跳过就行,但不能continue
list.add(hm.get(str));
list.add(i);
twoSet.add(list);
list = new ArrayList<>();
}
}
if (isPalindrome(second)){//如果second是回文字,那么就需要逆转一下first,放到second的后面。
secondStr.append(first);
String str = secondStr.reverse().toString();
if (hm.containsKey(str)){
if(i==hm.get(str))continue;
list.add(i);
list.add(hm.get(str));
twoSet.add(list);
list = new ArrayList<>();
}
}
}
}
twoList.addAll(twoSet);
return twoList;
}
private boolean isPalindrome(String word){
int i=0;
int j=word.length()-1;
while(i<j){
if (word.charAt(i)!=word.charAt(j))return false;
i++;
j--;
}
return true;
}
}
336. Palindrome Pairs
最新推荐文章于 2024-11-22 17:14:39 发布