关于Python的序列问题

给定一个仅含小写字母的字符串 s ,假设 s 的一个子序列 t 的第 i 个字符 对应了原字符串中的第 pi 个字符。我们定义 s 的一个松散子序列为:对于 i > 1 总是有 pi − pi−1 ≥ 2 。设一个子序列的价值为其包含的每个字符的价值之和 ( a∼z 分别为 1∼26 ) 。 求 s 的松散子序列中的最大价值 输入一行包含一个字符串 s 输出一行包含一个整数表示答案。
azaazaz 78

s = input()
n = len(s)
p = [-1] * n
last = [-1] * 26

for i in range(n):
    j = ord(s[i]) - ord('a')
    if last[j] != -1 and i - last[j] < 2:
        p[i] = p[last[j]]
    else:
        p[i] = i
    last[j] = i

dp = [0] * n
dp[0] = ord(s[0]) - ord('a') + 1

for i in range(1, n):
    if p[i] == p[i-1] + 1:
        dp[i] = dp[i-1]
    else:
        dp[i] = max(dp[j] + ord(s[i]) - ord('a') + 1 for j in range(i) if p[i] - p[j] >= 2)

print(dp[-1])

基于new Bing的回答:

img

s = input().strip()
n = len(s)
s_ = [s[0]]
for i in range(1, n):
    if s[i] != s_[-1]:
        s_.append(s[i])
m = len(s_)
val = [0] * 26
for i in range(26):
    val[i] = i + 1
f = [val[s_[0]]] + [0] * (m - 1)
for i in range(1, m):
    f[i] = f[i - 1]
    for j in range(i - 2, -1, -1):
        if s_[i] != s_[j] and i - j >= 2:
            f[i] = max(f[i], f[j] + val[s_[i]])
print(f[m - 1])


  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7742345
  • 除此之外, 这篇博客: python对字符串中指定字符进行替换中的 (2)替换指定位置i的字符为字符s:列表化字符串再以字符串形式输出 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 例子
    i,s = 0,'b'
    string = "abcabcabc"
    string = list(string)
    string[i] = s
    print(''.join(string))
    
    • 输出

    bbcabcabc