find palindrome pairs

来源:互联网 发布:用java平衡服务器负载 编辑:程序博客网 时间:2024/06/05 08:10

given a list of words, find palindrome pairs

import java.util.*;public class GetPalindomPairs {public static void main(String[] args) {        Set<String> dict1 = new HashSet<>();        dict1.add("a");        dict1.add("aa");        dict1.add("aaa");        for (List<String> list: getPairs(dict1)) {        for (String str: list) {        System.out.print(str+" ");        }        System.out.println("========");        }        System.out.println("++++++++");        Set<String> dict2 = new HashSet<>();        dict2.add("abcd");        dict2.add("dcbaz");        for (List<String> list: getPairs(dict2)) {        for (String str: list) {        System.out.print(str+" ");        }        System.out.println("========");        }}public static List<List<String>> getPairs(Set<String> dict) {List<List<String>> result = new ArrayList<List<String>>();for (String s : dict) {for (int i = 0; i < s.length(); ++i) {String s1 = s.substring(0, i);String s2 = s.substring(i, s.length());if (isPal(s1)) {judge(result, s, s2, dict, false);}if (isPal(s2)) {judge(result, s, s1, dict, true);}}}return result;}public static void judge(List<List<String>> result, String s, String compare, Set<String> dict, boolean position) {char[] array = compare.toCharArray();for (int j = 0; j < compare.length() / 2; ++j) {char c = array[j];array[j] = array[compare.length() - j - 1];array[compare.length() - j - 1] = c;}String reverse = new String(array);if (dict.contains(reverse) && !reverse.equals(s)) {List<String> list = new ArrayList<String>();if (position) {list.add(s);list.add(reverse);} else {list.add(reverse);list.add(s);}result.add(list);}}public static boolean isPal(String s) {if (s.length() <= 1)return true;int left = 0;int right = s.length() - 1;while (left < right) {if (s.charAt(left) != s.charAt(right))return false;++left;--right;}return true;}}


0 0
原创粉丝点击