跳转至

LeetCode: 205. 同构字符串

1、题目描述

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

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

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

示例 1:

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

示例 2:

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

示例 3:

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

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

2、解题思路

​ 这里需要说明的就是,字符串中,相同的字符,不管出现在什么位置上,都应该是相同的字符,不相同的字符不用管

​ 创建一个映射数组,第一个字符串的一个字母映射到第二个字符串,遇到了以后就来判断,不相等,返回false;

bool isIsomorphic(char* s, char* t) {


    int sTot[256] = {0};
    int tTos[256] = {0};

    int size = strlen(s);


    for (int i = 0; i < size; i++) {

        if (sTot[s[i]] == 0) {
            sTot[s[i]] = t[i];
        }

        if(tTos[t[i]] == 0){
            tTos[t[i]] = s[i];
        }

        if(sTot[s[i]] != t[i] || tTos[t[i]] != s[i]){
            return false;
        }

    }

    return true;  
}