算法-单词规律(290)

leetcode题目链接

这道题用哈希表来解决 一个哈希表存放从单词到字符的映射,一个存放从字符到单词的映射,依照空格分隔字符,并将每个字符存放到vector字符数组,

遍历 pattern,对于每个字符 c 和对应的单词 w

检查 charToWord 中是否已经存在映射,若存在且不匹配则返回 false

检查 wordToChar 中是否已经存在映射,若存在且不匹配则返回 false

否则,建立新的映射。

遍历结束没有发现不匹配,则返回true。

代码如下:

cpp 复制代码
class Solution {
public:
    bool wordPattern(string pattern, string s) {
   unordered_map<char, string> charToWord;
    unordered_map<string, char> wordToChar;
    vector<string> words;
    int pos = 0, start = 0;

    // 用空格分割字符串 s
    while ((pos = s.find(' ', start)) != string::npos) {
        words.push_back(s.substr(start, pos - start));
        start = pos + 1;
    }
    words.push_back(s.substr(start));

    // 如果单词数量和模式长度不匹配,返回 false
    if (words.size() != pattern.length()) {
        return false;
    }

    for (int i = 0; i < pattern.length(); ++i) {
        char c = pattern[i];
        string w = words[i];

        // 检查字符是否已映射到某个单词
        if (charToWord.find(c) != charToWord.end()) {
            if (charToWord[c] != w) {
                return false; // 不匹配返回 false
            }
        } else {
            charToWord[c] = w; // 新映射
        }

        // 检查单词是否已映射到某个字符
        if (wordToChar.find(w) != wordToChar.end()) {
            if (wordToChar[w] != c) {
                return false; // 不匹配返回 false
            }
        } else {
            wordToChar[w] = c; // 新映射
        }
    }

    return true;
    }
};

这里的s.find('',start)即从start的位置找到第一个空格的位置。

string::npos 是一个常数,表示查找操作未找到时的返回值。它通常用于判断 find 方法是否成功找到指定字符或子字符串。如果 find 返回 string::npos,意味着未找到。

相关推荐
StarPrayers.20 小时前
自蒸馏学习方法
人工智能·算法·学习方法
大锦终20 小时前
【动规】背包问题
c++·算法·动态规划
智者知已应修善业21 小时前
【c语言蓝桥杯计算卡片题】2023-2-12
c语言·c++·经验分享·笔记·算法·蓝桥杯
hansang_IR21 小时前
【题解】洛谷 P2330 [SCOI2005] 繁忙的都市 [生成树]
c++·算法·最小生成树
Croa-vo21 小时前
PayPal OA 全流程复盘|题型体验 + 成绩反馈 + 通关经验
数据结构·经验分享·算法·面试·职场和发展
AndrewHZ1 天前
【图像处理基石】 怎么让图片变成波普风?
图像处理·算法·计算机视觉·风格迁移·cv
无极小卒1 天前
如何在三维空间中生成任意方向的矩形内部点位坐标
开发语言·算法·c#
FMRbpm1 天前
链表中出现的问题
数据结构·c++·算法·链表·新手入门
Kuo-Teng1 天前
LeetCode 206: Reverse Linked List
java·算法·leetcode·职场和发展
庸子1 天前
Kubernetes调度器深度解析:从资源分配到亲和性策略的架构师之路
java·算法·云原生·贪心算法·kubernetes·devops