LeetCode刷题记录--205. 同构字符串

205. 同构字符串

给定两个字符串 和 t,判断它们是否是同构的。

如果 中的字符可以被替换得到 ,那么这两个字符串是同构的。

所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。

示例 1:

输入: s = "egg", t = "add"
输出: true

示例 2:

输入: s = "foo", t = "bar"
输出: false

示例 3:

输入: s = "paper", t = "title"
输出: true

说明:
你可以假设 和 具有相同的长度。

 

解题思路:

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版权协议,转载请附上原文出处链接和本声明。