De vegades, mentre treballem amb cadenes de Python, podem tenir un problema en què hem de substituir totes les ocurrències d'una subcadena per una altra.
Entrada: test_str = geeksforgeeks s1 = geeks s2 = abcd
Sortida: test_str = abcdforabcd Explicació: substituïm totes les ocurrències de s1 per s2 a test_str.
Entrada: test_str = geeksforgeeks s1 = per a s2 = abcd
Sortida: test_str = geeksabcdgeeks
Enfocament 1
Podem utilitzar la funció incorporada substituir present a python3 per substituir totes les ocurrències de la subcadena.
Implementació mitjançant la funció integrada: -
Python 3
impressió java
#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)> |
comanda zip a linux
>
>Sortida
abcdforabcd>
Complexitat temporal: O(n)
Espai auxiliar: O(n)
Enfocament 2:
S'utilitza la divisió de la cadena per subcadenes i després la substitució per la nova funció string.split().
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> |
>
>Sortida
abcdforabcd>
La complexitat temporal i espacial de tots els mètodes és la mateixa:
com executar un script a linux
Complexitat temporal: O(n)
Espai auxiliar: O(n)
Mètode 3: Un altre enfocament per substituir totes les ocurrències d'una subcadena en una cadena és utilitzar el re.sub() funció del mòdul re a Python.
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))> |
>
>Sortida
comentari xml
abcdforabcd>
Complexitat temporal: O(n), on n és la longitud de la cadena d'entrada. Això es deu al fet que la funció re.sub() itera per tota la cadena d'entrada i realitza una coincidència d'expressió regular a cada caràcter per trobar totes les ocurrències de la subcadena. El nombre d'iteracions és directament proporcional a la longitud de la cadena d'entrada.
Espai auxiliar: Nou
Mètode 4: Ús d'iteració simple
La idea darrere d'aquest enfocament és iterar a través de la cadena d'entrada caràcter per caràcter i comprovar si cada subcadena de longitud m coincideix amb la subcadena que volem substituir. Si ho fa, afegim la subcadena de substitució al nostre resultat i movem el punter cap endavant amb m caràcters. Si no coincideix, afegim el caràcter actual al resultat i avancem el punter 1 caràcter.
Python 3
mètode principal java
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))> |
>
>Sortida
abcdforabcd>
Complexitat temporal: O(nm), on n és la longitud de la cadena d'entrada i m és la longitud de la subcadena que s'ha de substituir.
Espai auxiliar: O(n), ja que estem creant una nova cadena per emmagatzemar el resultat.