leetcode 5781. 删除一个字符串中所有出现的给定子字符串(C++、java)

给你两个字符串 s 和 part ,请你对 s 反复执行以下操作直到 所有 子字符串 part 都被删除:

  • 找到 s 中 最左边 的子字符串 part ,并将它从 s 中删除。

请你返回从 s 中删除所有 part 子字符串以后得到的剩余字符串。

一个 子字符串 是一个字符串中连续的字符序列。

示例 1:

输入:s = "daabcbaabcbc", part = "abc"
输出:"dab"
解释:以下操作按顺序执行:
- s = "daabcbaabcbc" ,删除下标从 2 开始的 "abc" ,得到 s = "dabaabcbc" 。
- s = "dabaabcbc" ,删除下标从 4 开始的 "abc" ,得到 s = "dababc" 。
- s = "dababc" ,删除下标从 3 开始的 "abc" ,得到 s = "dab" 。
此时 s 中不再含有子字符串 "abc" 。

示例 2:

输入:s = "axxxxyyyyb", part = "xy"
输出:"ab"
解释:以下操作按顺序执行:
- s = "axxxxyyyyb" ,删除下标从 4 开始的 "xy" ,得到 s = "axxxyyyb" 。
- s = "axxxyyyb" ,删除下标从 3 开始的 "xy" ,得到 s = "axxyyb" 。
- s = "axxyyb" ,删除下标从 2 开始的 "xy" ,得到 s = "axyb" 。
- s = "axyb" ,删除下标从 1 开始的 "xy" ,得到 s = "ab" 。
此时 s 中不再含有子字符串 "xy" 。

提示:

  • 1 <= s.length <= 1000
  • 1 <= part.length <= 1000
  • s​​​​​​ 和 part 只包小写英文字母。

C++

class Solution {
public:
    string removeOccurrences(string s, string part) {
        int k=0;
        while(k<s.size()) {
            int m=s.size();
            int n=part.size();
            if(s[k]==part[0]) {
                if(s.substr(k,n)==part) {
                    s=s.substr(0,k)+s.substr(k+n);
                    k=0;
                    continue;
                }
            }
            k++;
        }
        return s;
    }
};

java

class Solution {
    public String removeOccurrences(String s, String part) {
        int k=0;
        while(k<s.length()) {
            int m=s.length();
            int n=part.length();
            if(s.charAt(k)==part.charAt(0) && s.substring(k,Math.min(k+n,m)).equals(part)) {
                s=s.substring(0,k)+s.substring(k+n,m);
                k=0;
                continue;
            }
            k++;
        }
        return s;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_27060423/article/details/118256607