Python – Korvaa kaikki alimerkkijonon esiintymät merkkijonossa
Joskus Python-merkkijonojen kanssa työskennellessämme voi tulla ongelma, jossa meidän on korvattava kaikki alimerkkijonon esiintymät muilla.
Syöte: test_str = geeksforgeeks s1 = geeks s2 = abcd
Lähtö: test_str = abcdforabcd Selitys: Korvaamme kaikki s1:n esiintymät s2:lla test_str:ssä.Syöte: test_str = geeksforgeeks s1 = for s2 = abcd
Lähtö: test_str = geeksabcdgeeks
Lähestymistapa 1
Voimme käyttää sisäänrakennettua korvaustoimintoa, joka on läsnä python3:ssa, korvaamaan kaikki alimerkkijonon esiintymät.
Toteutus sisäänrakennetun toiminnon avulla: -
Python 3
#Python has inbuilt function replace to replace all occurrences of substring.> input_string> => 'geeksforgeeks'> s1> => 'geeks'> s2> => 'abcd'> input_string> => input_string.replace(s1, s2)> print> (input_string)> |
Lähtö
abcdforabcd
Aika monimutkaisuus: Päällä)
Aputila: Päällä)
Lähestymistapa 2:
Merkkijono jaetaan osamerkkijonolla ja korvataan sitten uudella string.split()-funktiolla.
Python 3
#code for replacing all occurrences of substring s1 with new string s2> test_str> => 'geeksforgeeks'> s1> => 'geeks'> s2> => 'abcd'> #string split by substring> s> => test_str.split(s1)> new_str> => ''> for> i> in> s:> > if> (i> => => ''):> > new_str> +> => s2> > else> :> > new_str> +> => i> #printing the replaced string> print> (new_str)> #contributed by Bhavya Koganti> |
Lähtö
abcdforabcd
Ajan ja tilan monimutkaisuus kaikille menetelmille on sama:
Aika monimutkaisuus: Päällä)
Aputila: Päällä)
Tapa 3: Toinen tapa korvata kaikki alimerkkijonon esiintymät merkkijonossa on käyttää re.sub() toiminto pythonin re-moduulista.
Python 3
import> re> def> replace_substring(test_str, s1, s2):> > # Replacing all occurrences of substring s1 with s2> > test_str> => re.sub(s1, s2, test_str)> > return> test_str> # test> test_str> => 'geeksforgeeks'> s1> => 'geeks'> s2> => 'abcd'> print> (replace_substring(test_str, s1, s2))> |
Lähtö
abcdforabcd
Aika monimutkaisuus: O(n), missä n on syötetyn merkkijonon pituus. Tämä johtuu siitä, että re.sub()-funktio iteroi läpi koko syötemerkkijonon ja suorittaa säännöllisen lausekkeen vastaavuuden jokaiselle merkille löytääkseen alimerkkijonon kaikki esiintymät. Iteraatioiden määrä on suoraan verrannollinen syötemerkkijonon pituuteen.
Aputila: Uusi
Tapa 4: Yksinkertaisen iteroinnin käyttäminen
Tämän lähestymistavan ideana on iteroida syötettä merkkijono kerrallaan ja tarkistaa, vastaako jokainen m pituinen osamerkkijono korvattavaa osamerkkijonoa. Jos näin on, lisäämme tulokseen korvaavan alimerkkijonon ja siirrämme osoitinta eteenpäin m merkkiä. Jos se ei täsmää, lisäämme tulokseen nykyisen merkin ja siirrämme osoitinta 1 merkin eteenpäin.
Python 3
def> replace_substring(test_str, s1, s2):> > # Initialize an empty string to store the result> > result> => ''> > # Initialize a variable to keep track of our position in the string> > i> => 0> > # Loop through the string one character at a time> > while> i <> len> (test_str):> > # Check if the current substring matches the substring we want to replace> > if> test_str[i:i> +> len> (s1)]> => => s1:> > # If it does, add the replacement substring to the result and move the pointer forward> > result> +> => s2> > i> +> => len> (s1)> > else> :> > # If it doesn't, add the current character to the result and move the pointer forward> > result> +> => test_str[i]> > i> +> => 1> > # Return the final result> > return> result> # test> test_str> => 'geeksforgeeks'> s1> => 'geeks'> s2> => 'abcd'> print> (replace_substring(test_str, s1, s2))> |
Lähtö
abcdforabcd
Aika monimutkaisuus: O(nm), missä n on syötetyn merkkijonon pituus ja m on korvattavan osamerkkijonon pituus.
Aputila: O(n), koska luomme uuden merkkijonon tuloksen tallentamiseksi.