📅  最后修改于: 2023-12-03 15:42:14.106000             🧑  作者: Mango
本题为GATE IT 2006年考试中的一道编程题。给定一个字符串S和两个整数p和q,要求将S划分为若干个不超过q个字符的子串,并在每个子串前添加一个长度不超过p的数字序号。要求编号间用分隔符分开,最多允许p个数字,且每个数字都不能超过9个字符。如有特殊字符需要转义。编写程序实现功能并返回结果。
输入共三行,第一行为字符串长度N($1 \le N \le 1000$),第二行为字符串S,第三行为两个整数p和q($1 \le p,q \le 10$)。
输出按要求格式处理后的字符串。
28
This is a sample input file.
2 5
01_This_ is a_
02_sampl_ e inp_
03_ut fi_ le.
def add_number(s, p, q):
num = 0
count = 0
i = 0
res = ''
while i < len(s):
if s[i] == ' ' or s[i] == '.' or s[i] == ',' or s[i] == ';':
if count > q:
res += '\n'
num += 1
count = 0
res += '{:02d}_{}\n'.format(num, s[i-count:i])
count = 0
elif s[i].isdigit():
if count == 0:
res += '{:02d}_'.format(num)
res += s[i]
count += 1
if count == p:
res += '\n'
count = 0
else:
if count > q:
res += '\n'
num += 1
count = 0
res += '{:02d}_{}\n'.format(num, s[i-count:i+1])
count = 0
i += 1
if count > 0:
res += '{:02d}_{}\n'.format(num, s[i-count:])
return res
遍历字符串S一次,时间复杂度为O(N);空间复杂度为O(N),主要消耗在输出字符串上。整体复杂度较低。