'remove consecutive substrings from a string without importing any packages

I want to remove consecutive "a" substrings and replace them with one "a" from a string without importing any packages. For example, I want to get abbccca from aaabbcccaaaa. Any suggestions? Thanks.



Solution 1:[1]

This method will remove a determined repeated char from your string:

def remove_dulicated_char(string, char):
    new_s = ""
    prev = ""
    for c in string:
        if len(new_s) == 0:
            new_s += c
            prev = c
        if c == prev and c == char:
            continue
        else:
            new_s += c
            prev = c
    return new_s

print(remove_dulicated_char("aaabbcccaaaa", "a"))

Solution 2:[2]

Whats wrong with using a loop?

oldstring = 'aaabbcccaaaa'
# Initialise the first character as the same as the initial string 
# as this will always be the same.
newstring = oldstring[0]

# Loop through each character starting at the second character
# check if the preceding character is an a, if it isn't add it to 
# the new string. If it is an a then check if the current character
# is an a too. If the current character isn't an a then add it to 
# the new string.
for i in range(1, len(oldstring)):
    if oldstring[i-1] != 'a':
        newstring += oldstring[i]
    else:
       if oldstring[i] != 'a':
           newstring += oldstring[i]

print(newstring)

Solution 3:[3]

using python regular expressions this will do it. If you don't know about regex. They are extremely powerful for this kind of matching

import re

str = 'aaabbcccaaaa'

print(re.sub('a+', 'a', str))

Solution 4:[4]

You can use a function that removes double values of a string occurrence recursively until only one occurrence of the repeating string remains:

val = 'aaabbcccaaaaaaaaaaa'

def remove_doubles(v):
    v = v.replace('aa', 'a')
    if 'aa' in v:
        v = remove_doubles(v)
        if 'aa' in v:
            v = remove_doubles(v)
        else: return v
    else: return v

print(remove_doubles(val))

Solution 5:[5]

There are many ways to do this. Here's another one:

def remove_duplicates(s, x):
    t = [s[0]]
    for c in s[1:]:
        if c != x or t[-1] != x:
            t.append(c)
    return ''.join(t)

print(remove_duplicates('aaabbcccaaaa', 'a'))

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Paplusc
Solution 2 speeder1987
Solution 3 Gregory Mahoney
Solution 4 Cypherjac
Solution 5 Albert Winestein