在保留字符顺序的同时,必须将所有出现的字符替换为另一个字符。没有两个字符可以映射到同一字符,但是一个字符可以映射到自身。
因此,如果输入像s =“ egg”,t =“ add”,则输出为true,因为e可以映射到a,g可以映射到d。
为了解决这个问题,我们将遵循以下步骤-
定义大小为256的数组arr并用-1填充
定义访问的数组,大小为256,并用0填充
定义大小为256的visited1数组,并填充0
对于初始化i:= 0,当i <s的长度时,更新(将i增加1),执行-
造访过[s [i]]:= 1
visit1 [t [i]]:= 1
arr [s [i]]:= t [i]-'a'的ASCII码
如果arr [s [i]]不等于t [i]-'a'的ASCII,则-
返回假
如果Visited [s [i]]与1相同或Visited1 [t [i]]与1相同,则-
除此以外
返回真
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: bool isIsomorphic(string s, string t) { vector<int> arr(256, -1); vector<bool> visited(256, 0); vector<bool> visited1(256, 0); for (int i = 0; i < s.length(); i++) { if (visited[s[i]] == 1 || visited1[t[i]] == 1) { if (arr[s[i]] != t[i] - 'a') { return false; } } else { visited[s[i]] = 1; visited1[t[i]] = 1; arr[s[i]] = t[i] - 'a'; } } return true; } }; main(){ Solution ob; cout << (ob.isIsomorphic("sky","fry")); }
"sky","fry"
输出结果
1