logo

Python – Zamień wszystkie wystąpienia podciągu w ciągu

Czasami podczas pracy z ciągami znaków w Pythonie możemy napotkać problem polegający na konieczności zastąpienia wszystkich wystąpień danego podciągu innym.

Wejście : test_str = geeksforgeeks s1 = maniak s2 = abcd
Wyjście : test_str = abcdforabcd Objaśnienie: Zamieniamy wszystkie wystąpienia s1 na s2 w test_str.

Wejście : test_str = geeksforgeeks s1 = dla s2 = abcd
Wyjście : test_str = geeksabcdgeeks



Podejście 1

Możemy użyć wbudowanej funkcji zamiany obecnej w Pythonie3, aby zastąpić wszystkie wystąpienia podciągu.

Implementacja przy użyciu wbudowanej funkcji: -

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)>

Ciąg wielowierszowy JavaScript
>

>

Wyjście

abcdforabcd>

Złożoność czasowa: NA)
Przestrzeń pomocnicza: NA)

Podejście 2:

Stosowane jest dzielenie ciągu przez podciąg, a następnie zastępowanie go nową funkcją string.split().

Python3

rosomak kontra borsuk




#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>

>

>

Wyjście

abcdforabcd>

Złożoność czasowo-przestrzenna dla wszystkich metod jest taka sama:

Złożoność czasowa: NA)

Przestrzeń pomocnicza: NA)

Metoda 3: Innym podejściem do zastąpienia wszystkich wystąpień podciągu w ciągu jest użycie metody re.sub() funkcja z modułu re w Pythonie.

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))>

>

>

Wyjście

abcdforabcd>

Złożoność czasowa: O(n), gdzie n jest długością ciągu wejściowego. Dzieje się tak, ponieważ funkcja re.sub() iteruje po całym łańcuchu wejściowym i wykonuje dopasowanie wyrażenia regularnego na każdym znaku, aby znaleźć wszystkie wystąpienia podciągu. Liczba iteracji jest wprost proporcjonalna do długości ciągu wejściowego.
Przestrzeń pomocnicza: nowa

Metoda 4: Użycie prostej iteracji

Ideą tego podejścia jest iteracja po ciągu wejściowym znak po znaku i sprawdzanie, czy każdy podciąg o długości m pasuje do podciągu, który chcemy zastąpić. Jeśli tak, dodajemy podciąg zastępczy do naszego wyniku i przesuwamy wskaźnik do przodu o m znaków. Jeśli nie pasuje, dodajemy bieżący znak do wyniku i przesuwamy wskaźnik do przodu o 1 znak.

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))>

>

ciąg konkatenacyjny w Javie
>

Wyjście

abcdforabcd>

Złożoność czasowa: O(nm), gdzie n jest długością ciągu wejściowego, a m jest długością podciągu, który ma zostać zastąpiony.
Przestrzeń pomocnicza: O(n), ponieważ tworzymy nowy ciąg do przechowywania wyniku.