C++ 词语模式

已知字符串pattern与字符串str,确认str是否与pattern匹配。str与pattern匹配代表字符串str中的单词与pattern中的字符一一对应。(其中pattern中只包含小写字符,str中的单词只包含小写字符,使用空格分隔。)
例如:
pattern=“abba”, str="dog cat cat dog"匹配
pattern=“abba”, str="dog cat cat fish"不匹配
pattern=“aaaa”, str="dog cat cat dog"不匹配
pattern=“abba”, str="dog dog dog dog"不匹配

#include <string>
#include <map>
class Solution
{
public:
 Solution() {}
 ~Solution() {}
 bool wordPattern(std::string pattern, std::string str)
 {
  std::map<std::string, char> word_map;
  char used[128] = { 0 };
  std::string word;
  int pos = 0;
  str.push_back(' ');
  for (int i = 0; i < str.length(); i++)
  {
   if (str[i] == ' ')
   {
    if (pos == pattern.length())
    {
     return false;                     //说明pattern的字母比str的单词少
    }
    if (word_map.find(word) == word_map.end())
    {
     if (used[pattern[pos]])
     {
      return false;
     }
     word_map[word] = pattern[pos];
     used[pattern[pos]] = 1;
    }
    else
    {
     if (word_map[word] != pattern[pos])
     {
      return false;
     }
    }
    word = "";
    pos++;
   }
   else
   {
    word += str[i];
   }
  }
  if (pos!=pattern.length())
  {
   return false;                    //有多余的pattern字符
  }
  return true;
 }
};
int main()
{
 std::string pattern = "abba";
 std::string str = "dog cat cat dog";
 Solution solve;
 printf("%d\n", solve.wordPattern(pattern, str));
 return 0;
}

运行结果为:

1
发布了79 篇原创文章 · 获赞 62 · 访问量 2197

猜你喜欢

转载自blog.csdn.net/weixin_44208324/article/details/105014531