package com.interview.flag.f; import java.util.Set; /** * Created_By: stefanie * Date: 14-11-27 * Time: 下午3:03 */ /** * given a dict of words, find pair of words can concatenate to create a palindrome */ public class F2_PairPalindrome { public void findPairPalindrome(Set<String> dict) { for (String word : dict) { findPalindrome(word, dict); } } //for every word public void findPalindrome(String s, Set<String> dict) { //scan forward for (int i = 0; i < s.length(); i++) { String prefix = s.substring(0, i); if (isPalindrome(prefix)) { String target = reverse(s.substring(i)); if (dict.contains(target)) System.out.println(target + " " + s); } } //scan backward for (int i = s.length() - 1; i >= 0; i--) { String suffix = s.substring(i); if (isPalindrome(suffix)) { String target = reverse(s.substring(0, i)); if (dict.contains(target)) System.out.println(s + " " + target); } } } //check if s is a parlindrome public boolean isPalindrome(String s) { for (int i = 0, j = s.length() - 1; i < j; i++, j--) { if (s.charAt(i) != s.charAt(j)) return false; } return true; } //reverse a given string public String reverse(String s) { StringBuilder builder = new StringBuilder(); for (int i = s.length() - 1; i >= 0; i--) builder.append(s.charAt(i)); return builder.toString(); } }