本文题目和方法1来自博主【红目香薰】,
原文链接:https://blog.csdn.net/feng8403000/article/details/128637453
题目
给定两个字符串 s 和 t ,判断它们是否是同构的。
如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
题目理解与解题思路
1,同构字符串的形式 aaddd和ddfff是同构 即类似成语形式,两个AABB形似的成语可以理解为同构成语按照本题的意思,同构字符串就是格式相同的字符串,当然内容可以不同
2、借鉴原文思路有方法1
解题方法
方法1
【是我自己对该方法的理解,标准教程额可以参考原文】
import java.util.Scanner;
public class deddd {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String s = sc.next();
String t = sc.next();
sc.close();
boolean result = true;
//都转成字符数组·t.length == s.length
//转成字符串方便处理
char[] chars = s.toCharArray();
char[] chart = t.toCharArray();
//反正有效字符都是ASCII,不可能有效的超过byte
int[] preIndexOfs = new int[127];
int[] preIndexOft = new int[127];//空数组
System.out.println(chars[4]);
System.out.println(preIndexOfs[chars[4]]);
//在字符对应的位置上面赋值
//遍历的时候注意判断格式就行
for (int i = 0; i < chars.length; i++) {
System.out.println(preIndexOfs[chars[i]]+","+chars[i]+"对比"+preIndexOft[chart[i]]+","+chart[i]+","+chars[i]);
//比对字符独赢位置上的值,如果不一样说明这个字符第一次出现
//就是格式不一样,输出结果
if (preIndexOfs[chars[i]] != preIndexOft[chart[i]]) {
result = false;
break;
}
//标记这个字符
//两个数组同时
preIndexOfs[chars[i]] = 5;
preIndexOft[chart[i]] = 5;
}
System.out.println(result);
}
}