C#LeetCode刷题之#290-单词模式(Word Pattern)
问题
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3778 访问。
给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。
这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。
输入: pattern = "abba", str = "dog cat cat dog"
输出: true
输入:pattern = "abba", str = "dog cat cat fish"
输出: false
输入: pattern = "aaaa", str = "dog cat cat dog"
输出: false
输入: pattern = "abba", str = "dog dog dog dog"
输出: false
说明:你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。
Given a pattern and a string str, find if str follows the same pattern.
Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.
Input: pattern = "abba", str = "dog cat cat dog"
Output: true
Input:pattern = "abba", str = "dog cat cat fish"
Output: false
Input: pattern = "aaaa", str = "dog cat cat dog"
Output: false
Input: pattern = "abba", str = "dog dog dog dog"
Output: false
Notes:You may assume pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.
示例
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3778 访问。
public class Program {
public static void Main(string[] args) {
string pattern = "abbc";
string str = "dog cat cat fish";
var res = WordPattern(pattern, str);
Console.WriteLine(res);
Console.ReadKey();
}
private static bool WordPattern(string pattern, string str) {
//哈希法
//总体思路是建立“模式-单词”键值
//按“模式”完全建立键值对
//a->dog,b->cat,b->(none),c->fish
//再还原式匹配单词
var dic = new Dictionary<int, string>();
//分隔单词
var words = str.Split(' ');
//长度不同时,直接return false
if(words.Length != pattern.Length) return false;
//用词典(哈希)记录每种“模式”对应的值
for(var i = 0; i < pattern.Length; i++) {
//如果已经存在这个键了,不管
//如果不存在这个键,则加入词典
if(!dic.ContainsKey(pattern[i])) {
//不存在这个键,却存在相应的值,明显模式不匹配
if(dic.ContainsValue(words[i])) return false;
//加入词典中
dic[pattern[i]] = words[i];
}
}
//比对模式和单词
for(var i = 0; i < pattern.Length; i++) {
//不同时,匹配失败
if(dic[pattern[i]] != words[i]) return false;
}
//匹配成功
return true;
}
}
以上给出1种算法实现,以下是这个案例的输出结果:
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3778 访问。
False
分析:
显而易见,以上算法的时间复杂度为: 。
C#LeetCode刷题之#290-单词模式(Word Pattern)的更多相关文章
- LeetCode 290. 单词规律(Word Pattern) 41
290. 单词规律 290. Word Pattern 题目描述 给定一种规律 pattern 和一个字符串 str,判断 str 是否遵循相同的规律. 这里的 遵循 指完全匹配,例如,pattern ...
- [Swift]LeetCode290. 单词模式 | Word Pattern
Given a pattern and a string str, find if str follows the same pattern. Here follow means a full mat ...
- C#LeetCode刷题-哈希表
哈希表篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 42.8% 简单 3 无重复字符的最长子串 24.2% 中等 18 四数之和 ...
- C#LeetCode刷题之#205-同构字符串(Isomorphic Strings)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3770 访问. 给定两个字符串 s 和 t,判断它们是否是同构的. ...
- C#LeetCode刷题-字符串
字符串篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串 24.6% 中等 5 最长回文子串 22.4% 中等 6 Z字形变换 35.8% 中等 8 字符串转整数 (atoi) ...
- LeetCode刷题指南(字符串)
作者:CYC2018 文章链接:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Leetcode+%E9%A2%98%E8%A7% ...
- LeetCode刷题总结-数组篇(上)
数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...
- LeetCode刷题总结-数组篇(中)
本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...
- LeetCode刷题总结-树篇(中)
本篇接着<LeetCode刷题总结-树篇(上)>,讲解有关树的类型相关考点的习题,本期共收录17道题,1道简单题,10道中等题,6道困难题. 在LeetCode题库中,考察到的不同种类的树 ...
随机推荐
- SpringBoot2.x入门教程:引入jdbc模块与JdbcTemplate简单使用
这是公众号<Throwable文摘>发布的第23篇原创文章,收录于专辑<SpringBoot2.x入门>. 前提 这篇文章是<SpringBoot2.x入门>专辑的 ...
- zabbix自定义监控(当会话登录超过三个就报警)
安装过程在此省略. 1.agent端去修改配置文件 2.调用自定义内容 vim /etc/zabbix/zabbix_agentd.d/login.conf UserParameter=login-u ...
- 题解 洛谷 P4189 【[CTSC2010]星际旅行】
一个比较直接的想法就是对每个点进行拆点,拆成入点和出点,限制放在入点和出点相连的边上,然后跑最大费用最大流即可. 但是这样复杂度无法接受,所以考虑模拟费用流来解决本题. 发现 \(H\) 都大于等于该 ...
- RACTF-web C0llide?(js弱类型)
源码: const bodyParser = require("body-parser") const express = require("express") ...
- Python数据类型-str,list常见操作
一.字符串操作 语法:字符串名.startwith('字符串') 功能:判断字符串里是否以xxx开头 范例: 扩展:从控制台接收输入居住地址,如果地址以北京市开头,则输出北京人口,否则输入非北京人口. ...
- python学习笔记1 -- 函数式编程之高阶函数 filter
filter 函数用于过滤序列,与map 和reduce函数类似,作为高阶函数,他们也是同样的使用方法,filter(参数1, 参数2),参数1是一个函数,而参数2是一个序列. filter的作用是根 ...
- JavaScript Symbol对象
JavaScript Symbol对象 Symbol Symbol对象是es6中新引进的一种数据类型,它的作用非常简单,就是用于防止属性名冲突而产生. Symbol的最大特点就是值是具有唯一性,这代表 ...
- Python列表截取
Python列表截取: 使用索引下标查看列表元素: lst = ['a','b','c','d','e','f','g','h'] print(lst[0]) # a print(lst[3]) # ...
- PHP getimagesizefromstring - 获取图片信息函数
getimagesizefromstring — 从字符串中获取图像尺寸信息.高佣联盟 www.cgewang.com 语法 array getimagesizefromstring ( string ...
- PHP srand() 函数
实例 播种随机数生成器: <?phpsrand(mktime());echo(rand());?>高佣联盟 www.cgewang.com 定义和用法 srand() 函数播种随机数生成器 ...