在 C++ 中查找 K 相似字符串的 K 值的程序

假设我们有两个字符串 s 和 t。当我们可以将 s 中两个字母的位置恰好交换 K 次以便结果字符串是 t 时,这两个字符串是 K 相似的。我们有两个字谜 s 和 t,我们必须找到最小的 K,其中 s 和 t 是 K 相似的。

因此,如果输入类似于 s = "abc", t = "bac",那么输出将为 1。

示例

让我们看下面的实现来更好地理解

#include <bits/stdc++.h>

using namespace std;

class Solution {

public:

   int kSimilarity(string A, string B) {

      if (A == B)

         return 0;

      unordered_set<string> visited;

      visited.insert(A);

      queue<string> q;

      q.push(A);

      for (int lvl = 1; !q.empty(); lvl++) {

         int sz = q.size();

         while (sz--) {

            string curr = q.front();

            q.pop();

            int i = 0;

            while (i < curr.size() && curr[i] == B[i])

               i++;

            for (int j = i + 1; j < curr.size(); j++) {

               if (curr[i] == curr[j])

                  continue;

               if (curr[j] != B[i])

                  continue;

               if (curr[j] == B[j])

                  continue;

               swapp(curr, i, j);

               if (curr == B)

                  return lvl;

               if (!visited.count(curr)) {

                  visited.insert(curr);

                  q.push(curr);

               }

               swapp(curr, i, j);

            }

         }

      }

      return -1;

   }

   void swapp(string &s, int i, int j) {

      char x = s[i];

      char y = s[j];

      s[i] = y;

      s[j] = x;

   }

};

main(){

   Solution ob;

   cout << (ob.kSimilarity("abc", "bac"));

}

输入

"abc", "bac"
输出结果
1

以上是 在 C++ 中查找 K 相似字符串的 K 值的程序 的全部内容, 来源链接: utcz.com/z/345738.html

回到顶部