C ++中的同构字符串

在保留字符顺序的同时,必须将所有出现的字符替换为另一个字符。没有两个字符可以映射到同一字符,但是一个字符可以映射到自身。

因此,如果输入像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