这道题还是一个哈希表题,思路非常简单,其实你只需要创建两个哈希映射,然后将这两个哈希映射和字符串绑定,最终判断是否满足双向的映射关系。
class Solution {
public:
bool isIsomorphic(string s, string t) {
if(s.length()!=t.length()){
return false;
}
unordered_map<char, char>mapST,mapTS;
for(size_t i=0;i<s.length();++i){
char chars=s[i];
char chart=t[i];
if(mapST.count(chars)&&mapST[chars]!=chart){
return false;
}
if(mapTS.count(chart)&&mapTS[chart]!=chars){
return false;
}
mapST[chars]=chart;
mapTS[chart]=chars;
}
return true;
}
};
size_t
是一种无符号整数类型,通常用于表示数组或容器的大小和索引。它的大小根据平台不同而不同,但通常是 32 位或 64 位。使用 size_t
可以确保索引操作不会出现负值,并且与平台的内存大小相符。
在循环 for (size_t i = 0; i < s.length(); ++i)
中,i
被声明为 size_t
类型,以便在遍历字符串时与 s.length()
返回的类型匹配。这样做可以避免与不同整数类型之间的比较带来的编译器警告。
代码解释:
-
循环遍历字符串:
for (size_t i = 0; i < s.length(); ++i) {
使用 size_t
类型变量 i
遍历字符串 s
的每个字符。
2.获取当前字符:
char charS = s[i];
char charT = t[i];
charS
是字符串 s
中的当前字符。
charT
是字符串 t
中的对应字符。
3/检查映射关系:
if (mapST.count(charS) && mapST[charS] != charT) {
return false;
}
如果 charS
已经在 mapST
中有映射,但映射的字符不是 charT
,返回 false
。
4.检查反向映射:
if (mapTS.count(charT) && mapTS[charT] != charS) {
return false;
}
如果 charT
已经在 mapTS
中有映射,但映射的字符不是 charS
,返回 false
。
5.建立映射关系:
mapST[charS] = charT;
mapTS[charT] = charS;
将 charS
映射到 charT
,并且将 charT
映射到 charS
,以便记录它们的对应关系。