思路:将待比较的字符串各自映射到两个整型数组,最后比较数组即可。
实现:建立一个ArrayList存放字符串,建立一个整型数组存放映射的整型数据。初始化映射整数为1
遍历整个字符串,从0开始,如果ArrayList中不存在该字符,则将整型数据存入数组中,并将映射的整数加1,如果ArrayList中存在该字符,则获取整型数组中,与该字符对应的整数,并将其存入数组中;
例如:s1="add" 则实现后,对应的整型数组应该为[1 2 2];s2=“egg”,对应的整型数组也为[1 2 2],而s="paper",对应的整型数组为[1 2 1 3 4];
如果两个字符串对应的整型数组相等,则字符串同构
package com;
import java.util.*;
public class Isomorphic {
public boolean isIsomorphic(String s, String t) {
if(s.length()!=t.length()) return false;
int m=1;
int k=1;
ArrayList s1=new ArrayList(s.length()) ;
ArrayList t1=new ArrayList(t.length()) ;
int [] s11=new int[s.length()];
int[] t11=new int[t.length()];
for(int i=0;i<s.length();i++){
if (!s1.contains(s.charAt(i))){
s1.add(s.charAt(i));
s11[i]=m;
m++;
}else {
s1.add(s.charAt(i));
s11[i]=s11[s1.indexOf(s.charAt(i))];
}
if (!t1.contains(t.charAt(i))){
t1.add(t.charAt(i));
t11[i]=k;
k++;
}else {
t1.add(t.charAt(i));
t11[i]=t11[t1.indexOf(t.charAt(i))];
}
}
for(int i=0;i<s11.length;i++){
if (s11[i]!=t11[i]) return false;
}
return true;
}
public static void main(String[] args) {
String s="add";
String t="egg";
String string="paper";
String string1="title";
String string2="mile";
String string3="mkkl";
System.out.println(new Isomorphic().isIsomorphic(s,t));
System.out.println(new Isomorphic().isIsomorphic(string,string1));
System.out.println(new Isomorphic().isIsomorphic(string2,string3));
}
}
运算结果:true
true
false