Java函数实现判断两个字符串是否同构
发布时间:2023-07-02 03:53:23
两个字符串同构的定义是:两个字符串中的每个字符都可以通过字符串中其他字符的替换得到,且替换的规则相同。
函数实现如下:
public class Main {
public static boolean isIsomorphic(String s, String t) {
// 如果两个字符串的长度不同,则它们一定不是同构的
if (s.length() != t.length()) {
return false;
}
// 使用两个数组来记录s字符串和t字符串中字符的替换规则
// sToT数组记录s字符串中的字符替换为t字符后的结果
// tToS数组记录t字符串中的字符替换为s字符后的结果
char[] sToT = new char[256];
char[] tToS = new char[256];
for (int i = 0; i < s.length(); i++) {
char c1 = s.charAt(i);
char c2 = t.charAt(i);
// 在sToT和tToS数组中记录替换规则
// 如果s中的字符c1在sToT数组中不存在,则将c1替换为c2
if (sToT[c1] == 0) {
sToT[c1] = c2;
}
// 如果t中的字符c2在tToS数组中不存在,则将c2替换为c1
if (tToS[c2] == 0) {
tToS[c2] = c1;
}
// 检查替换规则是否与之前的字符一致
if (sToT[c1] != c2 || tToS[c2] != c1) {
return false;
}
}
return true;
}
public static void main(String[] args) {
String s1 = "abc";
String t1 = "def";
String s2 = "egg";
String t2 = "add";
System.out.println(isIsomorphic(s1, t1)); // 输出:true
System.out.println(isIsomorphic(s2, t2)); // 输出:true
}
}
在这个实现中,我们使用两个长度为256的数组char[] sToT和char[] tToS来记录字符串s和字符串t中字符的替换规则。数组的下标表示字符的ASCII码值,数组中对应的值表示替换后的字符。例如,sToT['a']表示字符'a'替换后的结果,tToS['b']表示字符'b'替换后的结果。在遍历字符串s和字符串t的过程中,我们根据替换规则更新数组sToT和tToS,如果替换规则与之前的字符不一致,则说明两个字符串不是同构的。
在测试代码中,我们测试了两对字符串s1和t1、s2和t2,分别输出了结果true和true,验证了我们的实现的正确性。
