标签:
Given two strings s and t, determine if they are isomorphic.
Two strings are isomorphic if the characters in s can be replaced to get t.
All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character but a character may map to itself.
For example,
Given "egg"
, "add"
, return true.
Given "foo"
, "bar"
, return false.
Given "paper"
, "title"
, return true.
Solution1:
思路:用map来map对应的char。注意特殊情况aa,ab. 要记录t的字母是否遇到过,用一个boolean array来检查。
public class Solution { public boolean isIsomorphic(String s, String t) { if(s.length()!=t.length()) { return false; } boolean[] check=new boolean[128]; Map<Character,Character> res=new HashMap<Character,Character>(); for(int i=0;i<s.length();i++) { char a=s.charAt(i); char b=t.charAt(i); if(!res.containsKey(a)) { if(check[b]) { return false; } res.put(a,b); check[b]=true; } else { if(b==res.get(a)) { continue; } else { return false; } } } return true; } }
Solution2:用双map来一一对应。
Solution3:
Isomorphic strings, word pattern这类题都可以用map的containsvalue,containskey来做,很省事。
public class Solution { public boolean isIsomorphic(String s, String t) { if(s.length()!=t.length()) { return false; } Map<Character,Character> res=new HashMap<Character,Character>(); for(int i=0;i<s.length();i++) { char a=s.charAt(i); char b=t.charAt(i); if(!res.containsKey(a)) { if(res.containsValue(b)) { return false; } res.put(a,b); } else { if(b==res.get(a)) { continue; } else { return false; } } } return true; } }
标签:
原文地址:http://www.cnblogs.com/Machelsky/p/5894772.html