c++刷题(24/100)正则匹配与位运算
题目1:正则表达式匹配
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
思路:这道题很快就能想到递归,但是由于*的存在使得判别比较多,所以也感觉比较难,网上查了答案,这个答案的精髓在于超出索引的部分返回0来表示,这样就少写了很多数组越界的判断。
class Solution {
public:
bool isMatch(char a,char b){
if(a==b||b=='.'){
if(a!=)return true ;
}
return false ;
}
char getChar(string s,int idx){
if(s.length()>idx) {
return s[idx] ;
}
return ;
}
bool match(string str, string pattern)
{
int slen = str.length() ;
int plen = pattern.length() ;
if(slen==&&plen==) return true ;
char s0 = getChar(str,) ;
char p0 = getChar(pattern,) ;
char p1 = getChar(pattern,) ;
if(isMatch(s0,p0)||p1=='*'){
if(p1=='*'){
bool isZeroFit = match(str.substr(),pattern.substr()) ;//0的情况
if(isZeroFit) return true ;
int i = ;
while(i<slen&&isMatch(getChar(str,i),p0)){
bool res = match(str.substr(i+),pattern.substr()) ;
if(res) return true ;
i++ ;
}
return false ;
}else{
if(slen==) return false ;
return match(str.substr(),pattern.substr()) ;
}
}
return false ;
}
};
题目二:只出现一次的数字 III
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。
示例 :
输入:[1,2,1,3,2,5]
输出:[3,5]
思路:要用异或的方法,两个相同的数异或是0,所以当只有一个数不同时,一直异或就能找到那个数,两个数的情况要找到这两个数异或结果后不同的那一位,然后将数组分组,按组异或找出这两个数
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
if (nums.size() < )return vector<int>();
else if (nums.size() == )return nums;
int all = ;
for (auto num:nums)
all ^= num;
int k = ;
while (true) {
if ( & all>>k)break;
k++ ;
}
int res1 = , res2 = ;
for (auto num : nums) {
if (num>>k & )
res1 ^= num;
else res2 ^= num;
}
vector<int> result;
result.push_back(res1);
result.push_back(res2);
return result;
}
};
题目三:二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路:最简单的想法是将给的数不断右移,每次右移之后如果结果&1为1,那么证明那一位有1,计数的变量就加一,然而这么做会时间超出,正确的解法是再做一个小判断,判断n&=n-1 是否为0,因为n&=n-1这种判别方法可以忽略掉bit位上0 的部分
class Solution {
public:
int NumberOf1(int n) {
int ans = ;
while(n!=){
n&=n- ;
ans++ ;
}
return ans ;
}
};
c++刷题(24/100)正则匹配与位运算的更多相关文章
- js正则匹配两位小数
今天写一个用js正则校验最多保留两位小数的格式. a = /^\d+|\d+\.\d{1,2}$/; 测试 a.test(1.222); 结果:true 一下蒙了,怎么可能,最后找了好久,原来需要把^ ...
- [刷题] 24 Swap Nodes in Paris
要求 给定一个链表,对于每两个相邻的节点,交换其位置 示例 1->2->3->4->NULL 2->1->4->3->NULL 实现 1 struct ...
- 面试刷题24:介绍一枚 JAVA妹妹?
java提供的自动垃圾收集机制大大提高了程序员的开发效率. 但是自动垃圾收集不是万能的,明确jvm的内存结构,工作机制是设计高扩展应用的基础. 也是诊断jvm运行时问题的必备技能. 我是李福春,我在准 ...
- LeetCode刷题笔记(3)Java位运算符与使用按位异或(进制之间的转换)
1.问题描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 算法应该具有线性时间复杂度并且不使用额外空间. 输入: [4,1,2,1,2] 输 ...
- 2017北京国庆刷题Day1 morning
期望得分:100+100+100=300 实际得分:100+100+70=270 T1位运算1(bit) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK ...
- LeetCode 热题 HOT 100(05,正则表达式匹配)
LeetCode 热题 HOT 100(05,正则表达式匹配) 不够优秀,发量尚多,千锤百炼,方可成佛. 算法的重要性不言而喻,无论你是研究者,还是最近比较火热的IT 打工人,都理应需要一定的算法能力 ...
- 【刷题】LOJ 6227 「网络流 24 题」最长k可重线段集问题
题目描述 给定平面 \(\text{xoy}\) 上 \(n\) 个开线段组成的集合 \(\text{I}\) ,和一个正整数 \(k\) ,试设计一个算法. 从开线段集合 \(\text{I}\) ...
- leecode刷题(24)-- 翻转二叉树
leecode刷题(24)-- 翻转二叉树 翻转二叉树 翻转一棵二叉树. 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 ...
- 剑指offer刷题
1.面试题43. 1-n整数中1出现的次数 输入一个整数 n ,求1-n这n个整数的十进制表示中1出现的次数. 例如,输入12,1-12这些整数中包含1 的数字有1.10.11和12,1一共出现了5次 ...
随机推荐
- 读书笔记-《Java核心技术卷I-基础知识》
1.定时器Timer类 构造定时器时,需要设置一个时间间隔,并告知定时器,当到达时间间隔时需要做什么操作.定时器需要知道调用哪一个方法,并要求传递的对象所属的类实现了java.awt.event包的A ...
- python 安装pymssql
error: command 'gcc' failed with exit status 1 ---------------------------------------- Command &quo ...
- Powershell笔记之help about_XXX
<<about_Arrays>> 1. 一直好奇gettype()输出中的Name这一列的Object[]是什么意思,现在终于明白了,请看下面的例子: 2. GM的不同用法 $ ...
- 笔记之远程桌面服务(RDS)
Windows默认只能有2个用户同时通过RDP进行连接,非常不方便,于是借此机会学习了下Win2012R2的远程桌面配置.以下我把学习过程记录一下: 1. 最开始我觉得只需要安装“Remote Des ...
- linux 负载均衡配置 keepalive lvs 使用nginx转发 CentOS7 搭建LVS+keepalived负载均衡
最近希望能够配置一下负载均衡,在虚拟机上面,但是网上找了很多资料很零散,对于不了解的人,很多不够详细,最近终于做好了,把具体的步骤写下来,方便各位网友查阅学习 这个实验需要安装nginx如果没有安装过 ...
- Java多线程(四) —— 线程并发库之Atomic
一.从原子操作开始 从相对简单的Atomic入手(java.util.concurrent是基于Queue的并发包,而Queue,很多情况下使用到了Atomic操作,因此首先从这里开始). 很多情况下 ...
- C++ STL 常用遍历算法
C++ STL 常用遍历算法 STL的容器算法迭代器的设计理念 1) STL的容器通过类模板技术,实现数据类型和容器模型的分离 2) STL的迭代器技术实现了遍历容器的统一方法:也为STL的算法提供了 ...
- MT【141】逆用特征根法
(清华大学THUSSAT) 已知 \(a=\left( \dfrac{-1+\sqrt{5}}{2} \right)^{-10}+\left( \dfrac{-1-\sqrt{5}}{2} \righ ...
- 【刷题】LOJ 6000 「网络流 24 题」搭配飞行员
题目描述 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭 ...
- HTML的标签元素分类的区别
HTML ,即Hyper Text Markup Language 超文本标记语言: 文本:纯字符,如window中的txt文本 超文本:在纯文本中嵌入样式,图片,音频,视频,链接等内容 HTML的基 ...