首页 > 解决方案 > 如何用新值替换字符串中的旧值?

问题描述

所以问题表明,如果句子中的给定单词以相同的字符开头和结尾,我删除该字符并继续这样做,直到它们不再相同或它们的长度小于 3。

示例:aabaa -> aba -> b

这不是问题,所以现在我应该用原始字符串中的“b”替换“aabaa”这个词。

我唯一的问题是句子没有空格。例如:

信任,就是一切。-> rus,is,all。

还要注意诸如(. , ! ? ; :)将被忽略但必须在最终输出中存在的字符。

到目前为止,我已经写了这个,但它不满足上面的例子:

s1 = str(input())
sentence = s1.split()

news = []
ignorabelCharacters = ['.',',','!','?',';',':']
helpList = []
for i in range(len(s1)):
    if s1[i] in ignorabelCharacters:
        helpList.append([s1[i],i])


for i in sentence:
    i = str(i)
    j = 0
    while j < len(i):
        if i[j] in ignorabelCharacters:
            i = i.replace(i[j],' ').strip()
            j+=1
        else:j+=1
    news.append(i)
s2 =' '.join(news)
newSentence = s2.split()


def checkAgain(newSentence):
    newNewSentance = []
    count = []
    x=0
    for i in newSentence:
        j = len(i)
        while j > 2:
            if i[0].lower() == i[-1]  or i[0].upper() == i[-1]:
                i = i[1:-1]
                j-=2
                x+=2
            else:
                break
        count.append(x)
        newNewSentance.append(i)
        x=0
    return [newNewSentance,count]

newNewSentence = checkAgain(newSentence)[0]
count = checkAgain(newSentence)[1]



def finalProcessing(newNewSentence,sentence,newSentence):
    finalSentence = []
    for i in range(len(sentence)):
        if len(newNewSentence[i]) == len(sentence[i]):
            finalSentence.append(newNewSentence[i])
        else:
            x = len(sentence[i]) - len(newSentence[i])
            if x ==0:
                finalSentence.append(newNewSentence[i])
            else:
                value = newNewSentence[i] + sentence[i][-x:]
                finalSentence.append(value)
    return finalSentence

finalSentence = finalProcessing(newNewSentence,sentence,newSentence)

def finalPrint(finalSentece):
    for i in range(len(finalSentece)):
        if i == len(finalSentece) -1:
            print(finalSentece[i],end='')
        else:
            print(finalSentece[i],end= ' ')

finalPrint(finalSentence)

标签: pythonpython-3.x

解决方案


这种方法与您的不同,但这是我的做法。

def condenseWord(w):
    ln = len(w)
    while ln >= 3:
        if w[0].lower() == w[-1].lower():
            w = w[1:-1]
            ln = len(w)
        else:
            break
    return w   

def collapseString(s):
    sep_chars = {' ', ',', '.', ';', ':', '!', '"', "'"}
    out = r''
    wdstrt = 0
    lstltr = 0
    for i in range(len(s)):
        if s[i] in sep_chars:
            ck = condenseWord(s[wdstrt:i])
            out += ck 
            out += s[i]
            wdstrt = i+1
            lstltr = i+1
        else:
            lstltr = i
    out += s[wdstrt:lstltr]
    return out    

然后
collapseString('aabaa')-> 'b' 和
collapseString('Trust,is,all.' )-> 'rus,is,all.'


推荐阅读