算法-单词规律(290)

[复制链接]
发表于 2026-2-1 13:25:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

leetcode标题链接 

这道题用哈希表来办理 一个哈希表存放从单词到字符的映射,一个存放从字符到单词的映射,依照空格分隔字符,并将每个字符存放到vector字符数组,
遍历 pattern,对于每个字符 c 和对应的单词 w:
查抄 charToWord 中是否已经存在映射,若存在且不匹配则返回 false。
查抄 wordToChar 中是否已经存在映射,若存在且不匹配则返回 false。
否则,创建新的映射。
遍历竣事没有发现不匹配,则返回true。
代码如下:
  1. class Solution {
  2. public:
  3.     bool wordPattern(string pattern, string s) {
  4.    unordered_map<char, string> charToWord;
  5.     unordered_map<string, char> wordToChar;
  6.     vector<string> words;
  7.     int pos = 0, start = 0;
  8.     // 用空格分割字符串 s
  9.     while ((pos = s.find(' ', start)) != string::npos) {
  10.         words.push_back(s.substr(start, pos - start));
  11.         start = pos + 1;
  12.     }
  13.     words.push_back(s.substr(start));
  14.     // 如果单词数量和模式长度不匹配,返回 false
  15.     if (words.size() != pattern.length()) {
  16.         return false;
  17.     }
  18.     for (int i = 0; i < pattern.length(); ++i) {
  19.         char c = pattern[i];
  20.         string w = words[i];
  21.         // 检查字符是否已映射到某个单词
  22.         if (charToWord.find(c) != charToWord.end()) {
  23.             if (charToWord[c] != w) {
  24.                 return false; // 不匹配返回 false
  25.             }
  26.         } else {
  27.             charToWord[c] = w; // 新映射
  28.         }
  29.         // 检查单词是否已映射到某个字符
  30.         if (wordToChar.find(w) != wordToChar.end()) {
  31.             if (wordToChar[w] != c) {
  32.                 return false; // 不匹配返回 false
  33.             }
  34.         } else {
  35.             wordToChar[w] = c; // 新映射
  36.         }
  37.     }
  38.     return true;
  39.     }
  40. };
复制代码
这里的s.find('',start)即从start的位置找到第一个空格的位置。
string::npos 是一个常数,表现查找操纵未找到时的返回值。它通常用于判定 find 方法是否乐成找到指定字符或子字符串。如果 find 返回 string::npos,意味着未找到。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表