编写算法,实现remove(string t)操作,即从当前串中删除所有和串t相同的子串用java
时间: 2024-12-04 17:25:03 浏览: 14
在 Java 中,要编写一个算法实现字符串 `t` 从给定字符串(假设为 `s`)中移除所有出现的子串 `t`,我们可以采用滑动窗口的方法。这是一个常见的字符串处理问题,通常在数据结构和算法中用于查找子串。以下是一个简单的示例:
```java
import java.util.ArrayList;
import java.util.List;
public class RemoveSubstring {
public String remove(String s, String t) {
if (t.isEmpty()) return s; // 如果t为空,直接返回原串
int count = 0; // 记录t在s中的匹配次数
for (int i = 0; i <= s.length() - t.length(); ) {
// 检查子串是否匹配
if (s.substring(i, i + t.length()).equals(t)) {
count++;
i += t.length(); // 移动到下一个可能的位置
} else {
i++; // 不是子串,直接移动一位
}
// 当找到一个非重叠的匹配时,更新结果并减去已移除的子串长度
if (count > 0) {
s = s.substring(0, i - t.length()) + s.substring(i);
count--;
}
}
return s;
}
public static void main(String[] args) {
RemoveSubstring remove = new RemoveSubstring();
System.out.println(remove.remove("dear mom, dear dad", "dear")); // 输出: mom, dad
}
}
```
这个算法的主要思路是使用一个指针 `i` 遍历输入字符串 `s`,每次检查子串 `s.substring(i, i+t.length())` 是否等于 `t`。如果相等,则计数器 `count` 增加并将指针向前移动 `t.length()`;如果不相等,只将指针增加1。当发现一个子串匹配时,就从 `s` 中移除它,并相应地更新 `count`。最后返回修改后的字符串。
阅读全文