📅  最后修改于: 2023-12-03 15:42:15.049000             🧑  作者: Mango
给定一个字符串S和一个字符k。你需要从S中删除一个k数量不定的子字符串,然后对S进行重新排序,你需要输出可以得到的所有可能的字符串。
字符串S和字符k(1<=|S|, |k|<=100)。
对于输入中的每一个字符串S和字符k,输出可以得到的所有可能的字符串。每个字符串都应该单独输出,每一行输出一个字符串。如果无法得到任何字符串,请输出“-1”。
S = "strong"
k = 'n'
gorst
grost
grots
sorgt
sort
storg
strog
torgs
torsg
tsgor
tsorg
这道题目需要我们删除字符串中的一个子字符串,并对字符串进行重新排序。可以使用递归的方法进行处理。首先,我们要找到所有包含字符k的子字符串,将这些子字符串删除,并对字符串进行重新排序;接下来,我们需要对每个得到的新字符串再进行相同的处理,直到字符串不包含字符k为止。
def delete_and_sort(s, k):
if k not in s:
return [s]
res = []
for i in range(len(s)):
if s[i] == k:
new_s = s[:i] + s[i+1:]
for j in delete_and_sort(new_s, k):
res.append(j)
return res
S = input("Input the string S: ")
k = input("Input the character k: ")
res = delete_and_sort(S, k)
if res == []:
print("-1")
else:
for i in sorted(list(set(res))):
print(i)
假设原字符串S长度为n,字符k在S中出现m次,则递归深度不超过m层,每层需要遍历字符串S,时间复杂度为O(n),总时间复杂度为O(nm)。