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次 ...
随机推荐
- p2 碰撞
P2可以实现物体碰撞模拟,同时在碰撞过程中派发一些事件实现碰撞检测,将碰撞信息及时反馈,以添加相应的特效. P2中,当两个刚体的最小包围盒AABB发生重叠,碰撞就开始了:然后刚体的形状发生重叠,同时P ...
- delphi手动创建dataset并插入值
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syste ...
- JavaScript的setTimeout()和setInterval()
1. setTimeout()方法 作用:在制定的毫秒数后调用函数或计算表达式 语法: setTimeout(code,millisec) 实例: function timedMsg() { var ...
- POJ2699_The Maximum Number of Strong Kings
这题目,,,真是...诶.坑了好久. 给一个有向图.U->V表示U可以打败V并得一分. 如果一个人的得分最高,或者他打败所有比自己得分高的人,那么此人就是king. 现在给出每个人的得分,求最多 ...
- jQuery Mobile页面跳转后未加载外部JS原因分析及解决
在使用jQuery Mobile进行Web开发中,当页面跳转时(pageA => pageB),在pageB中引用的JS并未成功运行.因为,JQM并为将整个页面加载到当前的dom中,仅将data ...
- [BZOJ1559]密码 AC自动机+状压
问题 K: [JSOI2009]密码 时间限制: 1 Sec 内存限制: 64 MB 题目描述 众所周知,密码在信息领域起到了不可估量的作用.对于普通的登陆口令,唯一的破解 方法就是暴力破解一逐个尝 ...
- Timing wheel心跳机制
在web服务中,断开空闲连接是一种减少资源浪费的一种手段,由此就有了心跳机制来判断一个连接是否空闲. 一种简单粗暴的方式: 1. 服务端每个连接保存一个最后一次操作的时间戳,每次这个连接对应fd可读时 ...
- 【刷题】COGS 2701 动态树
★★★☆ 输入文件:dynamic_tree.in 输出文件:dynamic_tree.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] 开始时有n个点形成的森林,共m个操作. ...
- 【刷题】BZOJ 4657 tower
Description Nick最近在玩一款很好玩的游戏,游戏规则是这样的: 有一个n*m的地图,地图上的每一个位置要么是空地,要么是炮塔,要么是一些BETA狗,Nick需要操纵炮塔攻击BETA狗们. ...
- Android Studio下“Error:Could not find com.android.tools.build:gradle:2.2.1”的解决方法
ref from: Android Studio下“Error:Could not find com.android.tools.build:gradle:2.2.1”的解决方法http://blog ...