遇到大写 M,复制前一个字符(然后删除 M),遇到大写 N 从字符串中删除下一个字符

Capital M is encountered, duplicate previous character (then remove the M), and capital N is encountered remove the next character from the string

def StringChanges(str):
    str2 = []
    list = ""

    for i in str:
        if i == 'M':
            str2.pop(i)
            str -= 1
            i -= 1
        elif i == 'N':
            if i == list - 1:
                str2.pop()
        else:
             str2.append(i)
             list -= 2
             i -= 2
    return ''.join(str2)

str = "oMoMkkNrrN"

print(StringChanges(str))

像这样使用re.sub

import re
strings = ['abcNdgM', 'abcdg', 'MrtyNNgMM']

for s in strings:
    # Repeat the cycles of transforming M/N with previous or subsequent characters:
    while True:
        s_new = re.sub(r'N.', '', re.sub(r'(.)M', r'', s))
        if s == s_new:
            break
        s = s_new
    # Remove any remaining Ms and Ns:
    s = re.sub(r'[MN]+', '', s)
    print(s)
# abcgg
# abcdg
# rtyggg

r'STRING': raw string.
. : 任意 1 个字符。
:捕获第 1 组,即与括号内的模式匹配的任何内容。

在这个 python 代码中,i 是一个字符串,在 for 循环的每次迭代中一次获取每个字母的值。但是在您链接的 cupofprogramming 示例中,i 是一个整数,表示循环的每次迭代中字母的 位置 (索引)。如果您希望此代码使用每个字母的索引,请查看 enumerate() 函数的工作原理。