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 进入需要保护代码之前添加简单 ...
随机推荐
- C# FileSystemWatcher监听文件事件
现有一个需求如下:监控某个目录中的文件修改,创建,删除等信息,并记录下来. 这里用到FileSystemWatcher类.由于考虑到文件的写入量会很频率,所以考虑先将监听到的消息记录到内存中. 监听部 ...
- 在工作有时候centos6.5系统使用rpm包安装mysql5.7出现的问题
首先说明一下,我用的CentOS版本是6.6,64位.打印机驱动程序是两个rpm安装包:cndrvcups-common-2.60-1.x86_64.rpm和cndrvcups-capt-2.60-1 ...
- linux下对进程按照内存使用情况进行排序
linux下对进程按照内存使用情况进行排序的命令为:ps aux --sort -rss 详细解说参见 http://alvinalexander.com/linux/unix-linux-proce ...
- 3.1 哈尔空间 V0
一张灰度图是由多个像素点而组成的,同样,这些像素点的是由一个从0(黑)到255(白)的非负数组成的.假设我们现在有一张小的灰度图像.在第一行的灰度值为110,100,120,140,130,100,1 ...
- flash builder (fb) 与flash professional cs6(fla) 联合调试
注意加载的swf名字与项目(fla)名字一致,在fb进行构建,如果fla代码做了修改,保持在fb构建最新.
- 说说Web.Config与App.Config
说到web.config和app.config大家都很熟悉,我们都叫他们配置文件,平时用的多,注意的少.两个有啥区别呢,很简单,一句话:如果是web程序,如webform项目类型和mvc项目类型就是w ...
- 利用nodejs搭建服务器,测试AJAX
最近学习了AJAX一直没有进行过测试,前今天了解了Noejs搭建本地服务器下就尝试了一下.通过AJAX请求的方式获取HTTP服务器返回数据的代码 首先创建一个serve.js的文件.并写入以下代码. ...
- Nuget 常用命令
Update-Package -ProjectName 'NLog' -Reinstall 主题 about_NuGet 简短说明 提供有关 NuGet 程序包管理器命令的信息. 详细说明 本主题介绍 ...
- VS2013,VS2015设置类模板文件表头
一般VS的类模板文件是放在C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplatesCache\CSha ...
- .net 环境下get 获取页面出现乱码问题解决
不多说了,先上代码: /// <summary> /// 获取页面内容 /// </summary> /// <param name="Url"> ...