284模板串匹配问题
题解
本题要求在给定的“模板串”中,替换所有的 '?'
以构造出多个不含前导零的正整数,并找出按字典序排列后的第 k
小的数。如果不存在满足条件的第 k
小数,返回 -1
。
解题思路
前导零检查:
- 首先检查模板串的首字符是否为
'0'
,如果是'0'
,则直接返回-1
,
- 首先检查模板串的首字符是否为
从后向前替换
'?'
:- 假如不考律前导 0 的情况,
???
每个?
都有十种可选的数字,可以替换为000
到999
,共1000
种可能。第k
小的数,即为第k - 1
个数。并且每个位置的”?
“填入的正应该是k - 1
的十进制的每一位数字 - 对于从后往前的每一个
'?'
,用k % 10
来替换该位置的字符,并将k
整除以10
,以便为下一个'?'
的替换提供新的数字。
- 假如不考律前导 0 的情况,
处理首位
'?'
:- 如果首位是
'?'
,则需要特别处理:- 替换为
k + 1
,确保首位不是'0'
。 - 检查
k + 1
是否小于10
,否则无法替换为单个数字,返回-1
。
- 替换为
- 如果首位是
代码解析
1 |
|
复杂度分析
- 时间复杂度:
O(n)
,其中n
是模板串的长度。需要遍历字符串一次进行替换。 - 空间复杂度:
O(n)
,用于存储字符串的列表形式。
284模板串匹配问题
https://kongshuilinhua.github.io/2024/12/26/284模板串匹配问题/