华为OD在线OJ:
已购买本专栏用户,请私信博主开通账号,在线刷题!!!
在线OJ:立即刷题
题库专栏:2023华为OD机试(A卷+B卷)(C++JavaJSPy)
题目描述
对于一个连续正整数组成的序列,可以将其拼接成一个字符串,再将字符串里的部分字符打乱顺序。如序列8 9 10 11 12,拼接成的字符串为89101112,打乱一部分字符后得到90811211,原来的正整数10就被拆成了0和1。
现给定一个按如上规则得到的打乱字符的字符串,请将其还原成连续正整数序列,并输出序列中最小的数字。
输入描述
输入一行,为打乱字符的字符串和正整数序列的长度,两者间用空格分隔,字符串长度不超过200,正整数不超过1000,保证输入可以还原成唯一序列。
输出描述
输出一个数字,为序列中最小的数字。
用例
输入
19801211 5
输出
8
用例
输入
432111111111 4
输出
111
解题思路:
统计打乱字符的字符串中各字符的数量。然后遍历所有可能的连续整数序列,对于每个序列,检查序列中的字符数量是否与打乱字符的字符串中各字符数量一致。如果找到一个匹配的序列,输出序列中最小的数字并结束循环。
- r读取输入的打乱字符的字符串和正整数序列的长度。
- 创建一个 Map,用于统计打乱字符的字符串中各字符的数量。
- 初始化滑动窗口的起始位置为1。
- 当滑动窗口的起始位置小于等于1000减去序列长度加1时,继续循环。
- 创建一个 Map,用于计算滑动窗口内各字符的数量。
- 遍历滑动窗口内的正整数,将正整数转换为字符串,遍历正整数字符串中的字符,将字符及其数量存入 Map。
- 初始化一个布尔变量,用于判断滑动窗口内各字符数量是否与打乱字符的字符串中各字符数量一致。
- 遍历打乱字符的字符串中的字符,如果滑动窗口内的字符数量与打乱字符的字符串中的字符数量不一致,将布尔变量设为False并跳出循环。
- 如果滑动窗口内各字符数量与打乱字符的字符串中各