力扣205同构字符串

haimian
2024-11-18 / 0 评论 / 4 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年11月18日,已超过153天没有更新,若内容或图片失效,请留言反馈。

这个题目貌似懂了,但有点还是不太明白,这个flag的具体作用,但是我旁边宿舍没有笔,所以说我明天需要把代码去写下来,明天去教室后研究研究怎么写
给定两个字符串 s 和 t ,判断它们是否是同构的。

如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

示例 1:

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

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

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

以下是代码的书写

bool isIsomorphic(char* s, char* t) {
    for (int i = 1; i < strlen(s); i++)
    {
        int finds = -1;
        int findt = -1;
        int flag = 0;//用于标记,用于优化时间
        for (int j = i-1; j >= 0; j--)
        {
            if (s[j] == s[i]) 
            {
                finds = j;
                flag = 1;
            }
            if (t[j] == t[i])
            {   
                flag = 1;
                findt = j;
            }
            //如果相等的原因不是因为 -1 == -1,则说明s和t找到的下标符合映射逻辑
            if (flag == 1 && finds == findt) break;
            //如果提早符合映射关系,则不需要继续循环了
        }
        if (finds != findt)return false;
    }
    return true;
}

他大概意思是 比如比较字符串S和T的时候,先进行一个外循环 比如循环S,然后接下来 如果S字符串的前面俩个是一样的话,那么把flag设置1 finds设置为j 也就是说设置成下一个字符串的开始,我重点是理解不了后面比较的过程,这个我还需要去深刻的去思索一下
m3n756ih.png

0

评论 (0)

取消