-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path11_Remove_All_Occurrences_of_a_Substring.cpp
77 lines (60 loc) · 2.62 KB
/
11_Remove_All_Occurrences_of_a_Substring.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// 1910. Remove All Occurrences of a Substring
// 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 from s.
// 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 and part consists of lowercase English letters.
class Solution
{
public:
string removeOccurrences(string s, string part)
{
string resultStack;
int targetLength = part.size();
char targetEndChar = part.back();
for (char currentChar : s)
{
resultStack.push_back(currentChar);
if (currentChar == targetEndChar && resultStack.size() >= targetLength)
{
if (resultStack.substr(resultStack.size() - targetLength) == part)
{
resultStack.erase(resultStack.size() - targetLength);
}
}
}
return resultStack;
}
};
/*
This code removes all occurrences of a substring 'part' from string 's'. Here's how it works:
1. It uses a string 'resultStack' to build the result character by character
2. Stores the length of target substring and its last character for optimization
3. For each character in input string:
- Adds it to resultStack
- If current character matches last char of target and resultStack is long enough:
- Checks if last few characters match the target substring
- If match found, removes that substring from resultStack
4. Finally returns the processed string with all occurrences removed
The approach is efficient as it processes string left to right and removes matches immediately
*/