Python – замінює всі входження підрядка в рядок

Іноді під час роботи з рядками Python у нас може виникнути проблема, коли нам потрібно замінити всі входження підрядка іншим.

Вхідні дані: test_str = geeksforgeeks s1 = geeks s2 = abcd
Вихід: test_str = abcdforarabcd Пояснення: ми замінюємо всі входження s1 на s2 у test_str.

Вхідні дані: test_str = geeksforgeeks s1 = для s2 = abcd
Вихід: test_str = geeksabcdgeeks

Підхід 1

Ми можемо використовувати вбудовану функцію replace, наявну в python3, щоб замінити всі входження підрядка.

Реалізація за допомогою вбудованої функції:-

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

Вихід

abcdforabcd 

Часова складність: O(n)
Допоміжний простір: O(n)

Підхід 2:

Використовується розділення рядка на підрядок і заміна на нову функцію string.split().

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>

Вихід

abcdforabcd 

Часова та просторова складність для всіх методів однакові:

Часова складність: O(n)

Допоміжний простір: O(n)

Спосіб 3: Іншим підходом до заміни всіх входжень підрядка в рядку є використання re.sub() функція з модуля re в 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))>

Вихід

abcdforabcd 

Часова складність: O(n), де n - довжина вхідного рядка. Це тому, що функція re.sub() повторює весь вхідний рядок і виконує збіг регулярного виразу для кожного символу, щоб знайти всі входження підрядка. Кількість ітерацій прямо пропорційна довжині вхідного рядка.
Допоміжне приміщення:Нове

Спосіб 4: Використання простої ітерації

Ідея цього підходу полягає в тому, щоб перебирати вхідний рядок символ за символом і перевіряти, чи кожен підрядок довжиною m відповідає підрядку, який ми хочемо замінити. Якщо це так, ми додаємо підрядок заміни до нашого результату та переміщуємо покажчик вперед на m символів. Якщо не збігається, до результату додаємо поточний символ і переміщуємо покажчик на 1 символ вперед.

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

Вихід

abcdforabcd 

Часова складність: O(nm), де n — довжина вхідного рядка, а m — довжина підрядка, який потрібно замінити.
Допоміжні приміщення: O(n), оскільки ми створюємо новий рядок для збереження результату.