1910. Remove All Occurrences of a Substring
Description
Given two strings s
and part
, perform the following operation on s
until all occurrences of the substring part
are removed:
- Find the leftmost occurrence of the substring
part
and remove it froms
.
Return s
after removing all occurrences of part
.
A substring is a contiguous sequence of characters in a string.
Example 1:
Input: s = "daabcbaabcbc", part = "abc" Output: "dab" Explanation: The following operations are done: - s = "daabcbaabcbc", remove "abc" starting at index 2, so s = "dabaabcbc". - s = "dabaabcbc", remove "abc" starting at index 4, so s = "dababc". - s = "dababc", remove "abc" starting at index 3, so s = "dab". Now s has no occurrences of "abc".
Example 2:
Input: s = "axxxxyyyyb", part = "xy" Output: "ab" Explanation: The following operations are done: - s = "axxxxyyyyb", remove "xy" starting at index 4 so s = "axxxyyyb". - s = "axxxyyyb", remove "xy" starting at index 3 so s = "axxyyb". - s = "axxyyb", remove "xy" starting at index 2 so s = "axyb". - s = "axyb", remove "xy" starting at index 1 so s = "ab". Now s has no occurrences of "xy".
Constraints:
1 <= s.length <= 1000
1 <= part.length <= 1000
s
andpart
consists of lowercase English letters.
Solutions
Solution: Stack
- Time complexity: O(mn)
- Space complexity: O(n)
JavaScript
js
/**
* @param {string} s
* @param {string} part
* @return {string}
*/
const removeOccurrences = function (s, part) {
const size = part.length;
const result = [];
const isMatch = end => {
if (end < size) return false;
let current = 0;
for (let index = end - size; index < end; index++) {
if (result[index] !== part[current]) return false;
current += 1;
}
return true;
};
let current = 0;
for (const element of s) {
result[current++] = element;
if (!isMatch(current)) continue;
current -= size;
}
return result.slice(0, current).join('');
};