代码比较多,基本解法;首先把输入的两个字符串按空格分开转化为列表;然后分别取第一个元素表示个数,再对R列表去重和排序(排序前还要把R中的字符串元素转化为整数);需要找出要输出的数字个数(除第一个),我把它分为两类;第一类是:元素,该元素出现的次数;第二类是:该元素出现的每一次位置信息,该位置处的值;因为对于R中的元素未必是I中某元素的子串,因此要过滤出有效的数字;假设R中有a个有效元素,R中所有元素总出现次数为b,则要输出的数字个数(除第一个)为(a+b)*2;因为输出格式是<元素,出现次数>,<出现位置,该位置元素>。注释很清楚,如下:
while True: try: I=input().split()#按空格分成列表 R=input().split() m=int(I.pop(0))#取第一个元素作为个数 n=int(R.pop(0)) for i in range(n):#字符串->整数,为了后面的排序 R[i]=int(R[i]) R=set(R)#去重 R=sorted(R)#排序 count=0#记录R中的元素在I中出现的总次数 num=0#记录R中有几个元素是I中元素的子串 flag0=False#标识位,标识当前R中元素是否是I中某元素的子串 for i in R: for j in I: if str(i) in j: flag0=True#说明该元素至少是I中一个元素的子串 count+=1 if flag0: num+=1 flag0=False#每次循环结束置为false,为了下一个元素的判断 count=(count+num)*2#要输出的第一个数,表示后面元素的个数 #输出时,因为有位置信息所以count*2,又要输出元素和总次数 #因此num*2 print(count,end='')#按格式输出,以‘’结尾,下次输出紧跟着 for i in R: num=0 for j in I: if str(i) not in j: continue flag0=True#说明该元素至少是I中一个元素的子串,有效 num+=1#num记录当前元素是几个元素的子串 if not flag0:#如果该元素无效,跳过 continue print(' '+str(i)+' '+str(num),end='')#按格式 for index,j in enumerate(I): if str(i) in j: print(' '+str(index)+' '+j,end='') flag0=False#同样置false,为了下个元素的判断 print()#这是为了换行,不然会过不了测试 except: break