寻找最小操作次数的程序,以在 Python 中对字符串进行排序
假设我们有一个字符串s。我们必须对s执行以下操作,直到我们得到一个排序的字符串-
选择最大的索引i使得1<=i<s的长度和s[i]<s[i-1]。
选择最大的索引j,使得i<=j<s的长度和s[k]<s[i-1]对于k在[i,j]范围内的所有可能值。
在索引i-1和j处交换两个字符。
反转索引i的后缀。
我们必须找到使字符串排序所需的操作数。答案可能非常大,因此返回结果模10^9+7。
因此,如果输入类似于s="ppqpp",那么输出将为2,因为
在第一次操作中,i=3,j=4。交换s[2]和s[4]以获得s="ppppq",然后从索引3反转子字符串。现在,s="pppqp"。
在第二个操作中,i=4,j=4。交换s[3]和s[4]得到s="ppppq",然后从索引4反转子串,现在,s="ppppq"。
示例
让我们看下面的实现来更好地理解
def solve(s):
d = [0]*26
a = 0
t = 1
m = 10**9 + 7
n = ord('a')
for i,c in enumerate(s[::-1],1):
j = ord(c) - n
d[j] += 1
a = (a+sum(d[:j])*t//d[j])%m
t = t*i//d[j]
return a
s = "ppqpp"
print(solve(s))输入
"ppqpp"输出结果
2
热门推荐
10 宝宝周岁敬酒祝福语简短
11 新郎表白成语祝福语简短
12 送蛇的祝福语简短
13 婆婆生日祝福语短语简短
14 国庆求婚祝福语简短精辟
15 订婚新发言简短祝福语
16 送灯祝福语简短独特
17 新婚贺词简短的祝福语
18 给长辈祝福语简短大全