首页 > 试题广场 >

???

[编程题]???
  • 热度指数:371 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
有一个字符串 s ,它由小写英文字母和可能是零个或多个的字符 `?` 组成。

旺仔哥哥想将每个 `?` 改成小写英文字母,使字符串 t 成为字符串 s 的子序列(不一定连续)。

输出任何这样的可能的改写后的字符串,如果没有符合条件的字符串存在,则直接报告不可能即可。

输入描述:
第一行包含一个整数 T ( 1 \leq T \leq 10^4 ) - 测试用例数。

每个测试用例的第一行包含一个字符串 s ( 1 \leq |s| \leq 2 \cdot 10^5,且 s 仅由小写英文字母和 ```?``` 组成。

每个测试用例的第二行包含一个字符串 t ( 1 \leq |t| \leq |s| 且 t 仅由小写英文字母组成)--该字符串本应是字符串 s 的子序列。

所有测试用例中 |s| 的总和不超过 2 \cdot 10^5 ,其中 |x| 表示字符串 x 的长度。


输出描述:
对于每个测试用例,如果不存在语句中描述的字符串,则输出 "NO"(不带引号)。

否则,输出 "YES"(不带引号)。然后,输出一行--符合所有条件的字符串。

如果可能有多个答案,您可以输出其中任何一个。
示例1

输入

4
??a???e????ba
efe
cbe??????e?b???b
be
a???bf?????
deadaeefb
f???bf?efc?eeebac?
afbacea

输出

YES
efaeaaeaaaaba
YES
cbeaaaaaaeabaaab
NO
YES
fafbbfaefceeeebaca
import sys
a = [ i.replace('\n','') for i in list(sys.stdin)]
n = int(a[0])
a.pop(0)

for i in range(n):
    if len(a[2*i+1]) > len(a[2*i]):
        print("NO")
    else:
        x = list()
        for n in a[2*i]:
            count = 0
            if len(a[2*i+1]) > 0:
                for j in a[2*i+1]:
                    if n =="?":
                        x.append(j)
                        a[2*i+1] = a[2*i+1][1:]
                        break
                    elif n == j:
                        x.append(j)
                        a[2*i+1] = a[2*i+1][1:]
                        break
                    else:
                        x.append(n)
                        break
            else:
                if n =="?":
                    x.append("a")
                else:
                    x.append(n)
    if len(x)>len(a[2*i])&nbs***bsp;len(a[2*i+1])>0:
        print("NO")
    else:
        print("YES")
        print("".join(x))




发表于 2025-09-12 22:44:53 回复(0)