Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình kiểm tra xem các từ đã cho có duy trì mẫu đã cho hay không trong C ++

Giả sử chúng ta có một mẫu p và một chuỗi str, chúng ta phải kiểm tra xem str có tuân theo cùng một mẫu hay không. Ở đây theo sau có nghĩa là có sự phân biệt giữa một chữ cái trong mẫu và một từ không trống trong str.

Vì vậy, nếu đầu vào giống như pattern ="cbbc", str ="word pattern pattern word", thì đầu ra sẽ là True.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • strcin:=str

  • Xác định một từ mảng

  • cho mỗi từ trong strcin

    • chèn từ vào cuối từ

  • Xác định một bản đồ p2i

  • i:=0

  • pat:=chuỗi trống

  • for c in pattern -

    • nếu c không phải là thành viên của p2i, thì -

      • (tăng tôi lên 1)

      • p2i [c]:=i

    • pat:=pat nối p2i [c]

  • Xác định một str2i bản đồ

  • i:=0

  • pat1:=chuỗi trống

  • cho c trong từ -

    • nếu c không phải là thành viên của str2i, thì -

      • (tăng tôi lên 1)

      • str2i [c]:=i

    • pat1:=pat1 nối str2i [c]

  • trả về true khi pat1 giống pat

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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 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"));
}

Đầu vào

"cbbc", "word pattern pattern word"

Đầu ra

1