解题思路
题目要求在字符串中提取所有连续数字串对应的整数,并找出其中能被给定正整数整除的最大值。
需要注意以下规则:
- 字符串只允许包含英文大小写字母和数字,出现其他字符直接返回 −1。
- 字符串长度必须在 1 到 10000 之间。
- 除数必须在 1 到 99 之间。
P14185.查找能被整除的最大整数(100分)
题目内容
给定一个字符串和一个正整数,字符串由大小写字母和数字组成,要求从字符串中找出最大能被给定正整数整除的数。
输入描述
- string inputStr // 第一个字符串
- int inputDivisor // 第二个正整数
输出描述
- int result // 返回结果值
注:
-
给定的 inputStr 字符串长度为 1 ~ 10000,给定的 inputDivisor 值的范围为 1 ~ 99;
-
从 inputStr 中解析的整数不可分割,支持前缀为 0 整数串,数值范围为 0 ~ 999,例如:
(1) "29ab03"、"29ab003"、"29ab0003"、"29ab00003"、"29ab000003"等 3 前面有前缀 0 的数字串,解析出整数为 29 和 3;
(2) "0abc123"、"00abc123"、"000abc123"、"0000abc123"、"00000abc123" 等含一个或多个 0 的数字串,解析出整数为 0 和 123。
-
如果输入都合法且能找到能被整除的最大数,则输出该最大数; 其他情况输出 −1,例如:
(1) 输入数据包含非法字符、值超出范围、长度超出范围等;
(2) 没有找到能被 inputDivisor 整除的数。
补充说明
- 程序运行内存要小于256MB;
- 程序运行耗时不能超过 1 秒。
样例1
输入
"abc123EFEDG34aadD78er",2
输出
78
说明
34 和 78 都能被 2 整除,78 为能被整除的最大数。
样例2
输入
"wrwqr1.0we+de-",3
输出
-1
说明
参数 1 字符串中包含非法字符 .+−
样例3
输入
"ewr23hk064ASW12VBG",4
输出
64
说明
获取的整数列表为 23、64、12,能被 4 整除的最大数为 64
样例4
输入
"ewr23hk064ASW12VBG",5
输出
-1
说明
获取的整数列表为 23、64、12,都不能被5整除
样例5
输入
"wrq45ret0eww237ere",7
输出
0
说明
只有 0 能被 7 整除
样例6
输入
"aaa2222bb66",2
输出
-1
说明
第一个参数中存在大于 999 的整数,参数不合法。