大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

题目考察的知识点

这道题目考察的主要知识点是字符串处理和哈希表的使用。我们需要判断两种分类方式是否同构,即字符串s中的字符是否可以按照某种映射关系替换得到字符串t。

题目解答方法的文字分析

为了判断两种分类方式是否同构,我们可以使用两个哈希表分别记录字符串s中的字符和字符串t中的字符之间的映射关系。首先,我们遍历字符串s和t的每个字符,并逐个建立它们之间的映射关系。在建立映射的过程中,我们需要检查是否已经有其他字符和当前字符建立了相同的映射关系,如果有,则说明不满足同构条件,返回"NO"。如果遍历完成后,没有发现不满足同构条件的情况,说明两种分类方式是同构的,返回"YES"。

本题解析所用的编程语言

本题解析使用的编程语言是C++。

完整且正确的编程代码

#include <unordered_map>
#include <string>

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @param t string字符串 
     * @return string字符串
     */
    string isIsomorphic(string s, string t) {
        // 哈希表,用于存储字符和字符之间的映射关系
        std::unordered_map<char, char> sToT;
        std::unordered_map<char, char> tToS;
        
        // 遍历字符串s和t,逐个建立映射关系
        for (int i = 0; i < s.size(); ++i) {
            char chS = s[i];
            char chT = t[i];
            
            if (sToT.find(chS) == sToT.end() && tToS.find(chT) == tToS.end()) {
                // 如果两个哈希表中都没有记录当前字符的映射关系,则建立映射
                sToT[chS] = chT;
                tToS[chT] = chS;
            } else {
                // 如果有一个哈希表中已经有了当前字符的映射关系,或者两个哈希表中已经有其他字符的映射关系,则不满足同构条件,返回"NO"
                if (sToT[chS] != chT || tToS[chT] != chS) {
                    return "NO";
                }
            }
        }
        
        // 如果遍历完成后没有发现不满足同构条件的情况,则两种分类方式是同构的,返回"YES"
        return "YES";
    }
};

您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!