C++ 中的单词模式


假设我们有一个模式和一个字符串字符串,找到字符串是否遵循相同的模式。这里遵循意味着模式中的一个字母和字符串中一个非空单词之间存在一个双射。

因此,如果输入类似于图案 = "cbbc",字符串 = "单词模式模式单词」,那么输出将为真。

要解决这个问题,我们将按照以下步骤进行操作:-

  • strcin := str

  • 定义单词数组

  • 对于 strcin 中的每个单词

    • 在 words 末尾插入单词

  • 定义一个映射 p2i

  • i := 0

  • pat := 空字符串

  • 对于模式中的 c -

    • 如果 c 不是 p2i 的成员,则 -

      • (i 增加 1)

      • p2i[c] := i

    • pat := pat 连接 p2i[c]

  • 定义一个映射 str2i

  • i := 0

  • pat1 := 空白字符串

  • 对于 words 中的 c -

    • 如果 c 不是 str2i 的成员,则 -

      • (i 增加 1)

      • str2i[c] := i

    • pat1 := pat1 连接 str2i[c]

  • 当 pat1 与 pat 相同时返回 true

示例 nbsp;

让我们看看以下实现以更好地理解 -

 实时演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool wordPattern( string pattern, string str ) {
      istringstream strcin(str);
      string word;
      vector<string> words;
      while (strcin >> word)
         words.push_back(word);
      unordered_map<char, int> p2i;
      int i = 0;
      string pat = "";
      for (auto c : pattern) {
         if (p2i.count(c) == 0) {
            i++;
            p2i[c] = i;
         }
         pat += to_string(p2i[c]);
      }
      unordered_map<string, int> str2i;
      i = 0;
      string pat1 = "";
      for (auto c : words) {
         if (str2i.count(c) == 0) {
            i++;
            str2i[c] = i;
         }
         pat1 += to_string(str2i[c]);
      }
      return pat1 == pat;
   }
};
main(){
   Solution ob;
   cout << (ob.wordPattern("cbbc", "word pattern pattern word"));
}

输入

"cbbc", "word pattern pattern word"

输出

1

更新于: 10-6 月 -2020

418 次浏览

助力你的 职业发展

完成课程即可获得认证

开始
广告