题解 | #农场智能分类系统#

农场智能分类系统

https://www.nowcoder.com/practice/a2c9a3fce4f141a3956fe67cd00cc3e2

知识点

哈希,字符串

思路

用两个哈希表map维护从s→t和t→s的映射。

首先,判断s和t长度是否一样,不一样肯定不同构,返回“NO”

然后,同时遍历两个字符串,由于长度一样,所以位次是对齐的,每一位之间的对应关系应该唯一。

对于当前两个字符a,b,若二者都没有映射,则建立映射,否则只需要检查双方是否有一方的映射不与另一方相同即可。

若存在一方映射与另一方不同,那就满足不同构,返回"NO"

都没有返回“NO”,则返回"YES"

代码c++

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @param t string字符串 
     * @return string字符串
     */
    string isIsomorphic(string s, string t) {
        // write code here
        map<char,char>mp;//s 到 t
        map<char,char>mpp;//映射是否存在
        map<char,int>mp2;// t 到 s
        map<char,int>mpp2;//映射是否存在
        if(s.size()!=t.size())return "NO";//长度比较
        for(int i=0;i<s.size();i++)
        {
              if(mp2[s[i]]==0&&mpp2[t[i]]==0)//都为0,互相建立映射
              {
                mp2[s[i]]=1;
                mpp2[t[i]]=1;
                mp[s[i]]=t[i];
                mpp[t[i]]=s[i];
              }
              else {
              if(mp[s[i]]!=t[i]||mpp[t[i]!=s[i]])return "NO";
                //一方映射与另一方不符,return “NO”
              }
        }
        return "YES";
    }
};
全部评论

相关推荐

双非一本失业第二年:《机器视觉垃圾分类》
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务