给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
示例 1:
输入: s ="egg",t ="add"输出: true
示例 2:
输入: s ="foo",t ="bar"输出: false
示例 3:
输入: s ="paper",t ="title"输出: true
说明:
你可以假设 s 和 t 具有相同的长度。
解题思路:
1、题目中没说字符串中字符串中只有小写字母,因此也可以时大小字母或其他特殊字符
2、将2字符串中每个字符映射成数字,即字符串用数字编码,并使用hash表保存该编码
3、当字符串某一相同位置映射数字不同时,2个字符串为非同构字符串
执行结果:

#define NUM 128
bool isIsomorphic(char * s, char * t){
int *hashs = (int *)malloc(NUM * sizeof(int));
int *hasht = (int *)malloc(NUM * sizeof(int));
memset(hashs, 0, NUM * sizeof(int));
memset(hasht, 0, NUM * sizeof(int));
int i;
int len = strlen(s);
for (i = 0; i < len; i++) {
int temp = i + 1;
hashs[s[i]] += temp;
hasht[t[i]] += temp;
// printf("%d %d \n", hashs[s[i]], hasht[t[i]]);
if (hashs[s[i]] != hasht[t[i]]) {
return false;
}
}
return true;
}
版权声明:本文为zhuyinghe原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。