每天一道LeetCode-----判断给定字符串是否符合某个模式
2018-03-06 11:38
731 查看
Isomorphic Strings
原题链接Isomorphic Strings给定两个字符串,判断其中一个是否能转换成另一个,转换规则如下
必须是一对一
同一个字符两次转换必须相同,如果第一次字符’a’转换成’b’,那么当下次遇到’a’时,它就只能转换成’b’
不能有两个字符转换成相同字符,如果第一次’a’转换成’b’,那么之后其它的字符都不能再转换成’b’
思路:
通过两个数组记录转换规则,直到转换完成
代码如下
class Solution { public: bool isIsomorphic(string s, string t) { vector<int> nums(256, 0); vector<int> count(256, 0); for(int i = 0; i < s.size(); ++i) { /* 之前没有转换过,记录转换规则 */ if(nums[s[i]] == 0 && count[t[i]] == 0) { nums[s[i]] = t[i]; count[t[i]] = 1; } /* 当nums[s[i]] == t[i]时正确,否则返回false */ else if(nums[s[i]] != t[i]) { return false; } } return true; } };
Word Pattern
原题链接Word Pattern判断一个字符串中的单次是否按照给定模式排列
思路:
仍然是一对一的关系,和上面的类似
代码如下
class Solution { public: bool wordPattern(string pattern, string str) { unordered_map<char, string> hash; unordered_map<string, int> count; std::istringstream oss(str); std::string line; for(auto ch : pattern) { std::getline(oss, line, ' '); if(hash.count(ch) == 0 && count.count(line) == 0) { hash[ch] = line; count[line] = 1; } else if(hash[ch] != line) { return false; } } return std::getline(oss, line) ? false : true; } };
相关文章推荐
- 每天一道LeetCode-----判断某棵树是否是二叉搜索树
- 每天一道LeetCode-----判断二叉树左右两边是否成镜像关系
- 给定一个由括号([{)]}其中之一或多个组成的字符串判断是否符合左右括号成对标准,不同括号可任意嵌套
- 每天一道LeetCode-----寻找给定字符串中重复出现的子串
- 正则表达式RegularExpression(从字符串中获取想要的部分,判断给定的字符串是否符合正则表达式的过滤逻辑)
- 每天一道LeetCode-----给定字符串s和字符数组words,在s中找到words出现的位置,words内部字符串顺序无要求
- 每天一道LeetCode-----将字符串切分成若干单词,使得每个单词都在给定的字典中,求出所有的切分结果
- 每天一道算法题(一):给定一个整数,判断这个数是否是回文
- 每天一道LeetCode-----判断链表是否有环,如果有,找到环的入口位置
- 每天一道LeetCode-----计算二叉树的最大深度及最小深度,判断二叉树是否是高度平衡二叉树
- 每天一道LeetCode-----判断两个二叉树是否相同
- leetcode上做的一道判断括号字符串是否有效的问题
- 每天一道算法题1 判断字符串是否是回文字符串或者是否含有回文字符子串
- 每天一道LeetCode-----存在一个由加油站组成的环路,判断是否可以从某个加油站出发环绕一周
- 每天一道LeetCode-----判断一个数是否是happy number(每一位的平方和最终为1)
- LeetCode Valid Number(判断字符串是否是合法的数字表示 )
- 每天一道LeetCode-----给定序列中2/3/4个元素的和为target的所有集合,或3个元素的和最接近target的集合
- 每天一道LeetCode-----比较两个字符串,每个字符串被若干'.'分成多个数字,一个个比较
- 每天一道算法题(5)——判断整数序列是否是二叉查找树后序遍历结果
- 判断是否存在符合正则表达式的字符串