Soms kunnen we tijdens het werken met Python-strings een probleem tegenkomen waarbij we alle exemplaren van een substring moeten vervangen door andere.
Invoer : test_str = geeksforgeeks s1 = geeks s2 = abcd
Uitgang: test_str = abcdforabcd Uitleg: We vervangen alle exemplaren van s1 door s2 in test_str.
Invoer : test_str = geeksforgeeks s1 = voor s2 = abcd
Uitgang: test_str = geeksabcdgeeks
Benadering 1
We kunnen de ingebouwde functie vervangen die aanwezig is in python3 gebruiken om alle exemplaren van substring te vervangen.
Implementatie met behulp van de ingebouwde functie: -
Python3
#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)> |
>
>Uitvoer
soorten for-lus
abcdforabcd>
Tijdcomplexiteit: Op)
Hulpruimte: Op)
Benadering 2:
Er wordt gebruik gemaakt van het splitsen van de tekenreeks per subtekenreeks en het vervolgens vervangen door de nieuwe string.split()-functie.
Python3
#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> |
>
>Uitvoer
abcdforabcd>
De tijd- en ruimtecomplexiteit voor alle methoden is hetzelfde:
Tijdcomplexiteit: Op)
Hulpruimte: Op)
Methode 3: Een andere benadering om alle exemplaren van een subtekenreeks in een tekenreeks te vervangen, is door de re.sub() functie van de re-module in Python.
Python3
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))> |
>
>Uitvoer
abcdforabcd>
Tijdcomplexiteit: O(n), waarbij n de lengte van de invoerreeks is. Dit komt omdat de functie re.sub() de gehele invoertekenreeks doorloopt en een reguliere expressie-match uitvoert op elk teken om alle exemplaren van de subtekenreeks te vinden. Het aantal iteraties is recht evenredig met de lengte van de invoerreeks.
Extra ruimte: nieuw
Methode 4: Eenvoudige iteratie gebruiken
Het idee achter deze aanpak is om teken voor teken de invoerreeks te doorlopen en te controleren of elke subtekenreeks met lengte m overeenkomt met de subtekenreeks die we willen vervangen. Als dit het geval is, voegen we de vervangende subtekenreeks toe aan ons resultaat en verplaatsen we de aanwijzer m tekens vooruit. Als het niet overeenkomt, voegen we het huidige teken toe aan het resultaat en verplaatsen we de aanwijzer 1 teken vooruit.
Python3
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))> |
>
vind geblokkeerde nummers op Android
>Uitvoer
abcdforabcd>
Tijdcomplexiteit: O(nm), waarbij n de lengte is van de invoertekenreeks en m de lengte is van de subtekenreeks die moet worden vervangen.
Hulpruimte: O(n), omdat we een nieuwe string maken om het resultaat op te slaan.