当前位置: 首页 > news >正文

【C++】每日一题 290 单词规律

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。

这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。

#include <string>
#include <unordered_map>
#include <sstream>using namespace std;class Solution {
public:bool wordPattern(string pattern, string s) {unordered_map<char, string> charToWord;unordered_map<string, char> wordToChar;istringstream ss(s);string word;for (char c : pattern) {if (!(ss >> word)) // 如果没有更多单词了,返回 falsereturn false;// 如果当前字符已经在哈希表中,检查是否对应的单词匹配if (charToWord.find(c) != charToWord.end()) {if (charToWord[c] != word)return false;} else {// 如果当前单词已经在哈希表中,检查是否对应的字符匹配if (wordToChar.find(word) != wordToChar.end()) {if (wordToChar[word] != c)return false;} else {// 如果当前字符和单词都不在哈希表中,进行映射charToWord[c] = word;wordToChar[word] = c;}}}// 检查是否还有多余的单词return !(ss >> word);}
};

遍历 pattern 中的每个字符,同时使用istringstream从字符串 s 中提取单词。在遍历过程中,建立字符到单词的映射和单词到字符的映射,并检查映射是否正确。如果遍历完 pattern 后,仍然存在未匹配的单词,则返回 false。

时间复杂度分析
这个算法的时间复杂度取决于字符串 s 中单词的数量和 pattern 的长度,设 n 为 s 中单词的数量,m 为 pattern 的长度:

遍历 pattern 的过程中,需要将每个字符映射到对应的单词,这需要 O(m) 的时间复杂度。
使用istringstream从字符串 s 中提取单词的过程中,需要 O(n) 的时间复杂度。
最后检查是否还有多余的单词,需要 O(1) 的时间复杂度。
因此,总的时间复杂度为 O(m + n)。

空间复杂度分析
空间复杂度主要取决于哈希表的存储,哈希表的大小取决于 pattern 中唯一字符的数量和 s 中单词的数量:

哈希表 charToWord 存储了 pattern 中的每个字符到对应的单词,空间复杂度为 O(字符集大小)。
哈希表 wordToChar 存储了 s 中的每个单词到对应的字符,空间复杂度也为 O(单词数量)。
因此,总的空间复杂度为 O(字符集大小 + 单词数量)。

http://www.lryc.cn/news/340154.html

相关文章:

  • CSS3 animation-direction 属性
  • 【mysql 5.7 没有ini 文件,手动添加配置文件】
  • 【Python】从零开始学习Python中的随机模块:实现验证码生成功能
  • 游戏动画技术:从传统到深度学习
  • Github 2024-04-12 开源项目日报 Top10
  • 若依下整合多个Redis
  • SRTP + RTCP + SCTP
  • 每日一题 — 串联所有单词的子串
  • Android studio顶部‘app‘红叉- Moudle ‘XX.app’ dosen’t exist in project
  • 软考证书有用吗?软考证书的含金量大吗?
  • 自动化测试原理,怎么理解?【UI自动化】
  • typedef,#define,asserr,exit函数,free函数
  • Linux的重要命令(二)+了解Linux目录结构
  • nmap使用
  • 简约风好看的个人主页源码
  • 1113. 红与黑--Flood Fill 算法
  • 深入Java中间件:编程设计精粹
  • AUTOCAD输出或打印PDF文件时,如何将图形居中且布满图纸?
  • unity socket udp 连接
  • 【ensp】VLAN间通信的解决办法
  • 接口测试框架搭建D22
  • CASA模型教程
  • 算法思路-遥感语义分割与变化检测
  • 动态规划专练( 231.打家劫舍Ⅱ)
  • K-means和逻辑回归
  • 3.2 iHRM人力资源 - 组织架构 - 编辑及删除
  • 支付系统核心逻辑 — — 状态机(JavaGolang版本)
  • rest_framework_mongoengine实现后端的增删改查
  • 【精读文献】Scientific data|2017-2021年中国10米玉米农田变化制图
  • 高光谱图像修复笔记