-
Notifications
You must be signed in to change notification settings - Fork 0
/
leetcode336.java
52 lines (47 loc) · 1.81 KB
/
leetcode336.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public class Solution {
public List<List<Integer>> palindromePairs(String[] words) {
List<List<Integer>> res = new ArrayList<>();
if(words == null || words.length < 2)
return res;
Map<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++){
for(int j = 0; j <= words[i].length(); j++){
String str1 = words[i].substring(0,j);
String str2 = words[i].substring(j);
if(isPalindrome(str1)){
String str2rev = new StringBuilder(str2).reverse().toString();
if(map.containsKey(str2rev) && map.get(str2rev) != i){
List<Integer> list = new ArrayList<>();
list.add(map.get(str2rev));
list.add(i);
res.add(list);
}
}
if(isPalindrome(str2)){
String str1rev = new StringBuilder(str1).reverse().toString();
if(map.containsKey(str1rev) && map.get(str1rev) != i && str2.length()!=0){
List<Integer> list = new ArrayList<>();
list.add(i);
list.add(map.get(str1rev));
res.add(list);
}
}
}
}
return res;
}
private boolean isPalindrome(String str){
int left = 0;
int right = str.length()-1;
while(left < right){
if(str.charAt(left) != str.charAt(right))
return false;
left++;
right--;
}
return true;
}
}