本文共 1228 字,大约阅读时间需要 4 分钟。
为了判断两个字符串 s 和 t 是否是同构,我们需要确保它们中的每个字符可以通过替换得到对方,同时保持字符的顺序和一一对应关系。
我们可以通过以下步骤来实现:
false。sMap 和 tMap 来记录字符到字符的映射关系。数组大小设为 256 以覆盖所有可能的 ASCII 字符。s 和 t,对于每个字符 c 在 s 中出现时,记录它在 t 中的对应字符 d。如果 c 在 sMap 中已经存在但对应的字符不一致,返回 false。同样,如果 d 在 tMap 中已经存在但对应的字符不一致,也返回 false。t 和 s,确保每个字符在 t 中的映射关系能够正确反向到 s 中的字符。同样检查映射冲突。true;否则,返回 false。#includeusing namespace std;bool isIsomorphic(string s, string t) { if (s.size() != t.size()) return false; int sMap[256] = {0}; int tMap[256] = {0}; for (int i = 0; i < s.size(); ++i) { char c = s[i]; char d = t[i]; if (sMap[c] != 0) { if (sMap[c] != d) { return false; } } else { if (tMap[d] != 0) { return false; } sMap[c] = d; tMap[d] = c; } } return true;}
false。sMap 和 tMap 用于记录字符到字符的映射关系,初始值为 0。c 和 d,检查并记录映射关系。如果存在冲突,返回 false。true,否则返回 false。这种方法确保了字符的双向映射关系,时间复杂度为 O(n),空间复杂度为 O(1),非常高效。
转载地址:http://cut.baihongyu.com/