题目描述
小强在参加《密室逃生》游戏,当前关卡要求找到符合给定 密-码K(升序的不重复小写字母组成) 的箱子,并给出箱子编号,箱子编号为 1~N 。
每个箱子中都有一个 字符串s ,字符串由大写字母、小写字母、数字、标点符号、空格组成,需要在这些字符串中找到所有的字母,忽略大小写后排列出对应的密-码串,并返回匹配密-码的箱子序号。
提示:满足条件的箱子不超过1个。
输入描述
第一行为 key 的字符串,
第二行为箱子 boxes,为数组样式,以空格分隔
- 箱子 N 数量满足 1 ≤ N ≤ 10000,
- s 长度满足 0 ≤ s.length ≤ 50,
- 密-码为仅包含小写字母的升序字符串,且不存在重复字母,
- 密-码 K 长度1 ≤ K.l e n g t h ≤ 26
输出描述
返回对应箱子编号
如不存在符合要求的密-码箱,则返回 -1。
用例
输入 | abc s,sdf134 A2c4b |
输出 | 2 |
说明 | 第 2 个箱子中的 Abc ,符合密-码 abc。 |
题目解析
简单题,最简单的就是双重for循环,统计字符数量,在和key的数量对比。大于等于,则说明当前box就是可以匹配密-码的箱子,返回当前箱子的序号。如果一直找不到,则返回-1。
但是不知道会不会超时:另一种就是
先将key转成数组,进行字典序排序
外层循环依旧遍历每个box,
如果box.length < key.length,则肯定不行,直接下次循环。
如果box.length >= key.length,则先将box转为小写模式,然后将box转为数组字典序排序,接下来利用两个指针k,j,分别从key的0索引位置,和box的0索引位置开始扫描,如果扫描到的key[