iOS常见算法笔试问题
1、 给出一个由小写字母组成的字符串,把所有连续出现的 2 个 a 替换成 bb ( 2 个 b ),但是对于超过两个连续的 a,那么这些字符都不作替换。例如:
bad -> bad (一个a,不替换)
baad -> bbbd (替换成bb)
baaad -> baaad (连续三个a,不替换)
apaapaaapaa -> apbbpaaapbb (这里连续的a出现了4次,只有第二段和最后一段被替换)
- (NSString *)replace:(NSString *)str { // CODE HERE NSMutableString *retString = [NSMutableString stringWithString:str]; // 准备替换的字符串 NSString *replaceString = @"bb"; // 正则表达式 (^a{2}[^a]) 以aa(第三个字母不是a)开头,([^a]a{2}[^a]) 字符串中间的aa(前后都不是a),([^a]a{2}$) 以aa结尾(倒数第三个字母不是a) NSRegularExpression *regular = [[NSRegularExpression alloc] initWithPattern:@"(^a{2}[^a])|([^a]a{2}[^a])|([^a]a{2}$)" options:NSMatchingReportProgress error:nil]; NSRange range; do { range = [regular rangeOfFirstMatchInString:retString options:NSMatchingReportProgress range:NSMakeRange(0, retString.length)]; if (range.length == 4) {// 替换中间的aa [retString replaceCharactersInRange:NSMakeRange(range.location + 1, 2) withString:replaceString]; } else if (range.length > 0) { if (range.location == 0) {// 替换开头的aa [retString replaceCharactersInRange:NSMakeRange(range.location, 2) withString:replaceString]; } else {// 替换结尾的aa [retString replaceCharactersInRange:NSMakeRange(retString.length - 2, 2) withString:replaceString]; } } } while (range.length > 0); return retString;}() -> TRUE (匹配)
[()] -> TRUE (匹配,括号可以嵌套)
()() -> TRUE (匹配,括号可以并列排列)
({}([])) -> TRUE (匹配,括号可以任意嵌套,大括号不必在外)
) -> FALSE (不匹配,缺少左括号)
(} -> FALSE (不匹配,左右括号不一样)
{)(} -> FALSE (不匹配,左右括号相反)
- (BOOL)isMatch:(NSString *)str { // CODE HERE // 采用进站出站的思想,遍历完字符串时如果array为空则匹配成功,否则失败 NSMutableArray *array = [NSMutableArray array]; for (int i = 0; i < str.length; i++) { int tag = [self createTagWithString:[str substringWithRange:NSMakeRange(i, 1)]]; if (tag != 0) { int lastTag = [[array lastObject] intValue]; if ((lastTag + tag) == 0) { [array removeLastObject]; } else { [array addObject:@(tag)]; } } } return array.count == 0;}- (int)createTagWithString:(NSString *)str { if ([str isEqualToString:@"("]) { return -1; } else if ([str isEqualToString:@")"]) { return 1; } else if ([str isEqualToString:@"["]) { return -2; } else if ([str isEqualToString:@"]"]) { return 2; } else if ([str isEqualToString:@"{"]) { return -3; } else if ([str isEqualToString:@"}"]) { return 3; } return 0;}3、写一个函数,找出一个数组中出现次数超过一半的数字,如果数字不存在,则返回-1。例如:
[0, 1, 2] --> -1 (每个数字只出现1次)
[0, 1, 2, 1] --> -1 (1出现了2次,刚好一半)
[0, 1, 2, 1, 1] --> 1 (1出现了3次,超过一半)
(注:数组不是按从小到达排序的,也许排序之后更容易找到这个数,但是有没有更好、更快的方法在不重新调整顺序的情况得到结果?)
- (int)mode:(NSArray *)array { // CODE HERE // 将集合中得数字转存到字典中,数字做key,对应出现的次数做value NSMutableDictionary *modeMap = [NSMutableDictionary dictionary]; [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSString *key = obj; id count = modeMap[key]; int i = [(NSNumber *)count intValue]; [modeMap setObject:@(i + 1) forKey:key]; }]; __block int retInt = -1; // 遍历字典,找出其中value大于集合一半的key并返回 [modeMap.allKeys enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSString *key = obj; int mode = [modeMap[key] intValue]; if (mode > array.count / 2) { retInt = key.intValue; *stop = YES; } }]; return retInt;}iOS常见算法笔试问题的更多相关文章
- iOS常见算法(二分法 冒泡 选择 快排)
二分法: 平均时间复杂度:O(log2n) int halfFuntion(int a[], int length, int number) { int start = 0; int end = l ...
- 字符串匹配常见算法(BF,RK,KMP,BM,Sunday)
今日了解了一下字符串匹配的各种方法. 并对sundaysearch算法实现并且单元. 字符串匹配算法,是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目.此算法通常输入为原字符串(strin ...
- Hadoop学习笔记—12.MapReduce中的常见算法
一.MapReduce中有哪些常见算法 (1)经典之王:单词计数 这个是MapReduce的经典案例,经典的不能再经典了! (2)数据去重 "数据去重"主要是为了掌握和利用并行化思 ...
- [Machine Learning] 机器学习常见算法分类汇总
声明:本篇博文根据http://www.ctocio.com/hotnews/15919.html整理,原作者张萌,尊重原创. 机器学习无疑是当前数据分析领域的一个热点内容.很多人在平时的工作中都或多 ...
- acm常见算法及例题
转自:http://blog.csdn.net/hengjie2009/article/details/7540135 acm常见算法及例题 初期:一.基本算法: (1)枚举. (poj17 ...
- 常见算法是js实现汇总(转载)
常见算法是js实现汇总 /*去重*/ <script> function delRepeat(arr){ var newArray=new Array(); var len=arr.len ...
- IOS常见的三种回调方法介绍
认识下三种IOS常见的回调模式. 代理模式作为IOS中最常见的通讯模式,代理几乎无处不在. 这里有一个数组,我们首先通过代理的方式将数组传递到其他方法中去. 设置协议及方法 @protocol Cal ...
- paper 12:机器学习常见算法分类汇总
机器学习无疑是当前数据分析领域的一个热点内容.很多人在平时的工作中都或多或少会用到机器学习的算法.这里南君先生为您总结一下常见的机器学习算法,以供您在工作和学习中参考. 机器学习的算法很多.很多时候困 ...
- iOS 常见知识点(三):Lock
iOS 常见知识点(一):Runtime iOS 常见知识点(二):RunLoop 锁是最常用的同步工具.一段代码段在同一个时间只能允许被有限个线程访问,比如一个线程 A 进入需要保护代码之前添加简单 ...
随机推荐
- canvas关于getImageData跨域问题解决方法
一.问题:在使用html5的canvas是,当用到getImageData方法获取图片信息时,会碰到跨域无法获取的情况,代码如下: document.getElementById("pic& ...
- awk 的使用
awk [-F field-separator] 'commands' input-file(s) 其中,commands 是真正awk命令,[-F域分隔符]是可选的.input-file(s) 是待 ...
- Sublime Text 注册码 License Key
Sublime Text (3103版本可用) 注册码 License Key
- 如何区分Babel中的stage-0,stage-1,stage-2以及stage-3(一)
大家知道,将ES6代码编译为ES5时,我们常用到Babel这个编译工具.大家参考一些网上的文章或者官方文档,里面常会建议大家在.babelrc中输入如下代码: { "presets" ...
- 黄聪:iis7.5 偶尔出现500服务器错误-内部服力器错误
搞了半天,发现是PHP映射模块出错了,最新的PHP7处理模块不行,换成5.6的就好了
- .net自定义WebService WSDL
最近工作需要向第三方提供一个WebService服务,坑爹的是第三方背景牛X,我方提供的服务必须完全遵照其客户端方预先定义好了的接口,一个符号都不允许修改. .net平台编写的WebService由于 ...
- CSS详解
Web前端开发css基础样式总结 颜色和单位的使用 颜色 用颜色的名字表示颜色,比如:red 用16进制表示演示 比如:#FF0000 用rgb数值表示颜色,rgb(红,绿,蓝),每个值都在0-255 ...
- MyBatis与Spring整合
1.单独使用MyBatis 单独使用MyBatis,不结合其他框架,主要步骤是: 1.创建SqlSessionFactory对象 创建方法是通过SqlSessionFactoryBuilder这个类从 ...
- ld.so.conf 和 ldconfig
1. 查看执行文件的链接库 ldd 例子: # ldd /sbin/sln not a dynamic executable “not a dynamic executable”是 ldd 说明 sl ...
- linux默认编辑器 sublime
开发人员把Vi improved简称Vim Vim编辑器再内存缓冲区中处理数据. 如果再启动Vim时未指定文件名,或者这个文件不存在,Vim会新开一段缓冲区域来编辑. 如果你再命令行下指定了一个已有文 ...