user14707249
user14707249

Reputation:

How to replace an old value in a string with a new one?

So the problem states that if the given word in a sentence begins and ends with the same character I remove that character and keep on doing that until they are not the same anymore or their length is less than 3.

Example: aabaa -> aba -> b

And that is not the problem, so now I should replace the word 'aabaa' with 'b' in original string.

The only problem i have is when the sentence is given without spaces. For example:

Trust,is,all. -> rus,is,all.

Also to note characters such as (. , ! ? ; :) are to be ignored but have to be there in the final output.

So far I've wrote this but it doesn't satisfy the example above:

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)

Upvotes: 0

Views: 146

Answers (1)

itprorh66
itprorh66

Reputation: 3288

This approach is different from yours but here is how I would do it.

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    

Then
collapseString('aabaa') -> 'b', and
collapseString('Trust,is,all.' ) -> 'rus,is,all.'

Upvotes: 1

Related Questions