用c编写算法,不超30行,从串s中删除所有和串t相同的子串。
时间: 2024-11-03 21:14:05 浏览: 24
在C语言中,我们可以使用滑动窗口技巧结合双指针的方式来解决这个问题,这里是一个不超过30行的示例:
```c
#include <stdio.h>
#include <string.h>
void removeSubstrings(char* s, char* t) {
int i = 0, j = 0;
while (i <= strlen(s)) {
if (j == strlen(t)) { // 如果子串结束
memmove(&s[i], &s[i+1], strlen(s) - i); // 移动剩余部分到左边
i--; // 减少已检查长度
} else if (s[i] != t[j]) { // 如果当前字符不匹配
i++; // 继续移动s指针
} else { // 匹配
j++; // 移动t指针
if (j == strlen(t)) { // 如果找到一个完整的t
i += strlen(t); // 跳过整个子串
}
}
}
}
int main() {
char s[] = "deletiontest";
char t[] = "eet";
removeSubstrings(s, t);
printf("Result: %s\n", s);
return 0;
}
```
这个程序会删除字符串`s`中所有的子串`t`。注意,这种方法假设`t`总是小于等于`s`的长度,并且不考虑大小写或其它比较规则。
阅读全文