Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Created by mona on 5/26/16.
- */
- import java.util.TreeMap;
- import java.util.Map;
- public class IsomorphicStrings {
- //the words "abca" and "zbxz" are isomorphic
- //aabc a(2) b(1) c(1)
- //my algorithm
- //create a sorted hashmap on value
- //check to see if two hashmap are equal based on their value set
- //assuming two isomorphic strings are of the same length
- public static <Integer, Character> TreeMap reverse(TreeMap<Character,Integer> tmap) {
- TreeMap<Integer,Character> rev = new TreeMap();
- for(Map.Entry<Character,Integer> entry : tmap.entrySet())
- rev.put(entry.getValue(), entry.getKey());
- return rev;
- }
- public static boolean areIsomorphic(String s1, String s2) {
- TreeMap<Character, Integer> freqMap1 = new TreeMap<>();
- TreeMap<Character, Integer> freqMap2 = new TreeMap<>();
- for (int i=0; i<s1.length(); i++) {
- if (freqMap1.containsKey(s1.charAt(i))) {
- int freq1 = freqMap1.get(s1.charAt(i));
- freqMap1.put(s1.charAt(i), freq1 + 1);
- }
- else {
- freqMap1.put(s1.charAt(i), 1);
- }
- if (freqMap2.containsKey(s2.charAt(i))) {
- int freq2 = freqMap2.get(s2.charAt(i));
- freqMap1.put(s2.charAt(i), freq2 + 1);
- }
- else {
- freqMap2.put(s2.charAt(i), 1);
- }
- }
- TreeMap<Integer, Character> sortedFreq1= reverse(freqMap1);
- Integer[] freqArr1 = sortedFreq1.keySet().toArray(new Integer[0]);
- TreeMap<Integer, Character> sortedFreq2= reverse(freqMap2);
- Integer[] freqArr2 = sortedFreq2.keySet().toArray(new Integer[0]);
- return freqArr1.equals(freqArr2);
- }
- public static void main(String[] args) {
- String s1="abca";
- String s2="zbxz";
- System.out.println(areIsomorphic(s1, s2));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment