iOS学习

iOS常见算法笔试问题

2017-03-07  本文已影响31人  march_1991

1、 给出一个由小写字母组成的字符串,把所有连续出现的 2 个 a 替换成 bb ( 2 个 b ),但是对于超过两个连续的 a,那么这些字符都不作替换。例如:

bad -> bad (一个a,不替换)

baad -> bbbd (替换成bb)

baaad -> baaad (连续三个a,不替换)

apaapaaapaa -> apbbpaaapbb (这里连续的a出现了4次,只有第二段和最后一段被替换)

2、 给出一个字符串,其中只包含括号(大中小括号 “()[]{}” ),括号可以任意嵌套。如果同样的左右括号成对出现并且嵌套正确,那么认为它是匹配的。例如:
() -> TRUE (匹配)

[()] -> TRUE (匹配,括号可以嵌套)

()() -> TRUE (匹配,括号可以并列排列)

({}([])) -> TRUE (匹配,括号可以任意嵌套,大括号不必在外)

) -> FALSE (不匹配,缺少左括号)

(} -> FALSE (不匹配,左右括号不一样)

{)(} -> FALSE (不匹配,左右括号相反)

3、写一个函数,找出一个数组中出现次数超过一半的数字,如果数字不存在,则返回-1。例如:

[0, 1, 2]             -->     -1   (每个数字只出现1次)

[0, 1, 2, 1]         -->     -1   (1出现了2次,刚好一半)

[0, 1, 2, 1, 1]     -->     1    (1出现了3次,超过一半)

(注:数组不是按从小到达排序的,也许排序之后更容易找到这个数,但是有没有更好、更快的方法在不重新调整顺序的情况得到结果?)

上一篇 下一篇

猜你喜欢

热点阅读