Іноді під час роботи з рядками 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
як викликати метод у java
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), оскільки ми створюємо новий рядок для збереження результату.