LeetCode 面試經典 150_哈希表_單詞規律(41_290_C++_簡單)

LeetCode 面試經典 150_哈希表_單詞規律(41_290_C++_簡單)

    • 題目描述:
    • 輸入輸出樣例:
    • 題解:
      • 解題思路:
        • 思路一(哈希表):
      • 代碼實現
        • 代碼實現(思路一(哈希表)):
        • 以思路一為例進行調試

題目描述:

給定一種規律 pattern 和一個字符串 s ,判斷 s 是否遵循相同的規律。

這里的 遵循 指完全匹配,例如, pattern 里的每個字母和字符串 s 中的每個非空單詞之間存在著雙向連接的對應規律。

輸入輸出樣例:

示例 1:
輸入:pattern = “abba”, s = “dog cat cat dog”
輸出:true

示例 2:
輸入:pattern = “abba”, s = “dog cat cat fish”
輸出:false

示例 3:
輸入:pattern = “aaaa”, s = “dog cat cat dog”
輸出:false

提示:
1 <= pattern.length <= 300
pattern 只包含小寫英文字母
1 <= s.length <= 3000
s 只包含小寫英文字母和 ’ ’
s 不包含 任何前導或尾隨對空格
s 中每個單詞都被 單個空格 分隔

題解:

解題思路:

思路一(哈希表):

1、具體思路如下:
判斷 pattern 中的字符c 與 s中對應的字符串 str 是否對應。
①、c 之前存在映射關系
????????之前的映射關系與 c:str 相同,繼續判斷pattern中剩余字符
????????之前的映射袁旭與 c:str 不同,返回false
②、c 之前不存在映射關系
????????str 不存在之前的映射關系中,建立映射關系 c:str
????????str 存在之前的映射關系中,返回false
2、復雜度分析:
① 時間復雜度:O(n + m),其中n是字符串s的長度,m是pattern的長度。在循環中使用ss >> str因此整個字符串的處理是O(n),遍歷pattern中的每個字符進行匹配O(m)。
② 空間復雜度:O(n + m),stringstream的消耗和需要存儲pattern中的字符映射和s中的單詞。

代碼實現

代碼實現(思路一(哈希表)):
class Solution {
public:bool wordPattern(string pattern, string s) {stringstream ss(s);  // 使用stringstream將輸入字符串s分割成單詞unordered_map<char, string> mp;  // 用于存儲字符和單詞的映射關系unordered_set<string> set;  // 用于檢查一個單詞是否已經被映射string str;for (int i = 0; i < pattern.size(); i++) {  // 遍歷pattern中的每個字符ss >> str;  // 從stringstream中讀取一個單詞if (mp.count(pattern[i])) {  // 如果當前字符已經有映射if (mp[pattern[i]] != str) {  // 檢查當前字符映射的單詞是否與當前單詞相同return false;  // 如果不同,則返回false}} else {if (set.count(str)) {  // 如果當前單詞已經被其他字符映射過return false;  // 如果是重復的單詞,返回false}mp[pattern[i]] = str;  // 為當前字符創建一個新的映射關系set.insert(str);  // 將當前單詞添加到set中,確保它不會被重復映射}}if (ss >> str) return false;  // 如果在讀取完所有pattern字符后仍有剩余的單詞,則返回false,表示長度不匹配return true;  // 如果所有檢查都通過,返回true}
};
以思路一為例進行調試
#include<iostream>
#include<unordered_map>
#include<unordered_set>
#include<sstream>
using namespace std;class Solution {
public:bool wordPattern(string pattern, string s) {stringstream ss(s);  // 使用stringstream將輸入字符串s分割成單詞unordered_map<char, string> mp;  // 用于存儲字符和單詞的映射關系unordered_set<string> set;  // 用于檢查一個單詞是否已經被映射string str;for (int i = 0; i < pattern.size(); i++) {  // 遍歷pattern中的每個字符ss >> str;  // 從stringstream中讀取一個單詞if (mp.count(pattern[i])) {  // 如果當前字符已經有映射if (mp[pattern[i]] != str) {  // 檢查當前字符映射的單詞是否與當前單詞相同return false;  // 如果不同,則返回false}} else {if (set.count(str)) {  // 如果當前單詞已經被其他字符映射過return false;  // 如果是重復的單詞,返回false}mp[pattern[i]] = str;  // 為當前字符創建一個新的映射關系set.insert(str);  // 將當前單詞添加到set中,確保它不會被重復映射}}if (ss >> str) return false;  // 如果在讀取完所有pattern字符后仍有剩余的單詞,則返回false,表示長度不匹配return true;  // 如果所有檢查都通過,返回true}
};int main(int argc, char const *argv[])
{string pattern="abba";string s="dog dog dog dog";Solution s1;if (s1.wordPattern(pattern,s)){cout<<"true"<<endl;    }else{cout<<"false"<<endl;}return 0;
}

LeetCode 面試經典 150_哈希表_單詞規律(41_290)原題鏈接
歡迎大家和我溝通交流(????)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/98279.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/98279.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/98279.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

librespeed c++ 上傳下載帶寬測試 排坑全流程

在搭建 LibreSpeed 測速服務并實現基于 curl/API 的上傳下載測試時&#xff0c;遇到 Nginx 配置沖突、PHP 權限異常等問題。本文將梳理從環境搭建到功能驗證的全流程&#xff0c;針對 “curl 上傳報 404/405”“PHP-FPM 權限拒絕”等典型問題&#xff0c;提供可復現的解決方案。…

重讀生成概率模型1----基礎概念

1 KL 散度 KL 散度的作為是描述兩個分布的差異的&#xff0c;首先是度量一個分布&#xff0c;用熵來度量。 1.1 熵 在介紹熵之間&#xff0c;首先要度量單個事件的信息量 I(x)?logP(x)I(x)-logP(x)I(x)?logP(x) 整體的信息量 H(P)Ex P[?logP(x)]?∑P(x)logP(x) \begin{alig…

排查解決磁盤占用高問題(容器掛載的磁盤)

最近遇到磁盤占用高的告警&#xff0c;記錄一下解決的思路。 首先是系統觸發告警&#xff0c;通知我們某臺機器磁盤占用高。&#xff08;或其他途徑得知&#xff09; 通過XShell登錄該機器。 執行df-h命令查看掛載占用情況找到真正占用高的掛載點掛載點/home目錄占用高&#xf…

流體(1)

流體 Minecraft 中的流體(Fluid),也常被稱為液體(Liquid),是一類能夠自由流動、形成河流、瀑布或湖泊的特殊方塊。它們的行為基于簡化的流體力學,是游戲世界中動態環境的重要組成部分。 ?? 流體是什么? 在 Minecraft 中,流體核心特點包括: 源方塊與流動:每個流…

機器學習-卷積神經網絡(CNN)

全連接層->卷積層 用有一個隱藏層的MLP訓練ImageNet數據集&#xff08;300*300的圖像&#xff0c;有1000個類別&#xff09;&#xff0c;要有10000個輸出 會有10億個可學習的參數&#xff0c;量太大 全連接&#xff1a;一個輸出是根據所有輸入加權得到在圖片中識別物體&…

Ubuntu 磁盤擴容與擴容失敗問題解決( df -h 與 GParted 顯示空間不一致的問題 -LVM)

在管理 Linux 磁盤時&#xff0c;你是否遇到過這樣的困惑&#xff1a;正常擴容之后&#xff0c;發現GParted 顯示某個分區還有幾十 GiB 可用&#xff0c;但 df -h 卻提示該分區已接近滿額&#xff1f;這種 “空間幻覺” 背后是系統存儲管理的分層設計&#xff0c;本文將從原理到…

PyQt5中QLineEdit控件數值顯示與小數位數控制

在PyQt5應用程序開發中&#xff0c;QLineEdit控件常用于顯示和編輯文本內容。當需要用它來顯示數值并控制小數位數時&#xff0c;開發者需要掌握一些特定的技巧。本文將深入探討幾種實現方法&#xff0c;每種方法都附帶完整獨立的代碼示例。 數值格式化基礎 在Python中&#xf…

LangChain使用方法以OpenAI 的聊天模型GPT-4o為例

以使用 OpenAI 的聊天模型&#xff08;如 GPT-4&#xff09;為例&#xff0c;從設置環境、初始化模型、調用模型到處理響應的各個方面進行介紹&#xff1a; 1. 環境設置 安裝 langchain-openai 包。設置環境變量 OPENAI_API_KEY&#xff0c;用于認證&#xff08;以linux為例&am…

Oracle為數據大表創建索引方案

在日常業務中&#xff0c;避免不了為數據量大表補充創建索引的情況&#xff0c;如果快速、有效地創建索引成了一個至關重要的問題&#xff08;注意&#xff1a;雖然提供有ONLINE在線執行的方式&#xff0c;理想狀態下不會阻塞DML操作&#xff0c;但ONLINE在開始、結束的兩個時刻…

網站服務相關問題

目錄 HTTP常見的狀態碼 http和https的區別以及使用的端口號 http處理請求的過程 https認證過程 正向代理和反向代理的區別 HTTP常見的狀態碼 HTTP&#xff08;超文本傳輸協議&#xff09;定義了一系列的狀態碼&#xff0c;用于表示客戶端請求的處理結果。以下是一些常見的…

Go并發編程實戰:深入理解Goroutine與Channel

Go并發編程實戰&#xff1a;深入理解Goroutine與ChannelGo并發編程實戰&#xff1a;深入理解Goroutine與Channel概述1. 為什么是Go的并發&#xff1f;從“線程”與“協程”說起2. Goroutine&#xff1a;如何使用&#xff1f;3. Channel&#xff1a;Goroutine間的安全通信創建與…

2025服貿會“海淀之夜”,點亮“科技”與“服務”底色

2025年9月12日傍晚&#xff0c;北京頤和園&#xff0c;十七孔橋旁&#xff0c;2025年中國國際服務貿易交易會“海淀之夜”如約而至。在“海淀之夜”&#xff0c;科技機構、金融機構、咨詢服務機構、出海服務企業以及跨國企業和國際友人等&#xff0c;將目光聚焦于此。被第三方機…

qt使用camke時,采用vcpkg工具鏈設置VTK的qt模塊QVTKOpenGLNativeWidget

下載:QVTKOpenGLNativeWidget嵌入qt應用中資源-CSDN下載 1.通過vcpkg安裝VTK,目前的VTK里面默認為qt6,如果需要安裝qt5,需要將端口配置進行修改 筆者的vcpkg的vtk端口路徑:D:\vcpkg\ports\vtk portfile.cmake 修改點: #第一處 #file(READ "${CURRENT_INSTALLED_DIR}/sh…

Axios在鴻蒙應用開發中的使用

目錄一、簡介二、安裝與配置三、axios用法1.axios泛型參數(1).第三個泛型參數-約束data請求參數的類型(2).第二個泛型參數-決定后臺返回數據的類型2.axios攔截器3.請求工具封裝統一處理業務狀態碼錯誤統一處理401或404錯誤一、簡介 Axios 是一個基于 Promise 的網絡請求庫&…

第九周文件上傳

文件上傳漏洞 不同的網站要不同的webshell。我們使用是php開發的網站。 一服務器白名單繞過 服務端白名單(Whitelist)是?種安全機制&#xff0c;它只允許預定義的合法元素通過&#xff08;只有有限的元素進入&#xff09;&#xff0c;其他所有內容默認被拒絕。相比黑名單&am…

計算機視覺必讀論文:從經典到前沿

計算機視覺必讀論文:從經典到前沿 一、前言 二、經典論文解讀? 2.1 圖像分類? 2.1.1 《ImageNet Classification with Deep Convolutional Neural Networks》(AlexNet)? 2.1.2 《Very Deep Convolutional Networks for Large-Scale Image Recognition》(VGGNet)? 2.1.…

對比PowerBI的字段參數,QuickBI的已選字段還有改進的空間

對比PowerBI的字段參數&#xff0c;QuickBI的已選字段還有改進的空間 之前分享過QuickBI的已選字段 vs PowerBI的字段參數&#xff0c;QuickBI可以在表格中實現PowerBI的字段參數效果&#xff0c;甚至比PowerBI實現的過程和使用方式更絲滑。 但如果應用到圖形中會怎么樣呢&am…

飛算JavaAI:Java開發新時代的破曉之光

免責聲明&#xff1a;此文章的所有內容皆是本人實驗測評&#xff0c;并非廣告推廣&#xff0c;并非抄襲。如有侵權&#xff0c;請聯系&#xff0c;謝謝&#xff01;【#飛算JavaAl炫技賽】 【#Java開發】摘要&#xff1a;飛算JavaAI作為全球首款聚焦Java的智能開發助手&#xff…

vulntarget-c靶場內網滲透

1. 環境搭建 2.對ubuntu20的滲透 對其進行端口掃描 訪問80端口 發現是laravel框架。版本是v8.78.1 使用 kaili 自帶的msf 進行滲透 search laravel use exploit/multi/php/ignition_laravel_debug_rce執行利用完成檢測 上傳木馬 先將木馬進行base64編碼 <?php eval($_P…

基于大模型多模態的人體體型評估:從“尺碼測量”到“視覺-感受”范式

基于大模型多模態的人體體型評估&#xff1a;從“尺碼測量”到“視覺-感受”范式摘要&#xff1a;傳統體型識別依賴CV骨架/關鍵點與像素量尺&#xff0c;容易受衣物、發型、姿態、光照影響&#xff0c;且“厘米級數值”與穿衣體驗、審美感受之間存在鴻溝。本文提出一種基于大模…