题解 | #农场智能分类系统#
农场智能分类系统
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";
}
};