<LeetCode>205.同构字符串

问题描述

在这里插入图片描述

解题思路

把两个字符串每个字符都重新映射到一个新的字符组成一个新的字符串,再比较新字符串是否相等就知道原字符串是否同构。
注意:这题字符串不止有小写字母。
所以映射这个ascii集合,开个128大小的数组。
映射思路:
待映射的下标从0-128(ascii码范围)
扫描两个字符串,遇到一个新字符给他分配一个新的下标,否则就用已经有的映射关系。
比如egg开始映射
第一步:e新字符,分配下标0
第二步:g新字符,分配下标1
第三步:g已经存在映射关系直接取值用
egg->0 1 1(单个整数表示一个ascii码值,具体查表看,不影响做题!!!)
add开始映射:
第一步:a新字符,分配下标0
第二步:d新字符,分配下标1
第三步:d已经存在映射关系直接取值用
add->0 1 1
比较一下0 1 1 == 0 1 1
所以同构的

C++实现

class Solution {
public:
    bool isIsomorphic(string s, string t) {
        string sp,tp;
        int smap[130],tmap[130];
        memset(smap,-1,sizeof(smap));
        memset(tmap,-1,sizeof(tmap));
        int ss = 0;
        int tt = 0;
        int l1 = s.size();
        int l2 = t.size();
        for(int i = 0;i < l1;i++){
            if(smap[s[i]]==-1)
            smap[s[i]] = ss++;
            sp.push_back((char)smap[s[i]]);
        }
        for(int i = 0;i < l2;i++){
            if(tmap[t[i]]==-1)
            tmap[t[i]] = tt++;
            tp.push_back((char)tmap[t[i]]);
        }
        return sp == tp;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值