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.
注意事项
You may assume both s and t have the same length.
样例
Given s = "egg", t = "add", return true.
Given s = "foo", t = "bar", return false.
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.
注意事项
You may assume both s and t have the same length.
样例
Given s = "egg", t = "add", return true.
Given s = "foo", t = "bar", return false.
Given s = "paper", t = "title", return true.
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
/**
* 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.
注意事项
You may assume both s and t have the same length.
样例
Given s = "egg", t = "add", return true.
Given s = "foo", t = "bar", return false.
Given s = "paper", t = "title", return true.
*
* @author Dell
*
*/
public class Test638 {
public static boolean isIsomorphic(String s, String t)
{
if(s.equals("")&&t.equals(""))
return true;
/*LinkedHashMap<Character,Integer> map1=new LinkedHashMap<>();
LinkedHashMap<Character,Integer> map2=new LinkedHashMap<>();
for(int i=0;i<s.length();i++)
{
if(!map1.containsKey(s.charAt(i)))
{
map1.put(s.charAt(i), 1);
}
else
{
map1.put(s.charAt(i), map1.get(s.charAt(i))+1);
}
}
for(int i=0;i<t.length();i++)
{
if(!map2.containsKey(t.charAt(i)))
{
map2.put(t.charAt(i), 1);
}
else
{
map2.put(t.charAt(i), map2.get(t.charAt(i))+1);
}
}*/
boolean result=true;
int[] map1=new int[256];
int[] map2=new int[256];
for(int i=0;i<s.length();i++)
{
map1[s.charAt(i)]++;
}
for(int i=0;i<s.length();i++)
{
map2[t.charAt(i)]++;
}
for(int i=0;i<s.length();i++)
{
if(map1[s.charAt(i)]!=map2[t.charAt(i)])
{
result=false;
break;
}
}
return result;
}
public static boolean isIsomorphic1(String s, String t)
{
if(s==null||t==null) return false;
if(s.length()!=t.length()) return false;
Map<Character,Character> map=new HashMap<>();
Set<Character> set=new HashSet<>();
for(int i=0;i<s.length();i++)
{
char c1=s.charAt(i);
char c2=t.charAt(i);
if(map.containsKey(c1))
{
if(map.get(c1)!=c2) return false;
}
else
{
if(set.contains(c2)) return false;
else
{
map.put(c1, c2);
set.add(c2);
}
}
}
return true;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
String t=sc.nextLine();
System.out.println(isIsomorphic(s,t));
}
}