给出一个由小写字母组成的字符串,找出两个相邻且相同的字母,并删除它们。 在该字符串上反复执行上述操作,直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。 限制: 1.1<=输入的字符长度<=20000 输入的字符串仅由小写字母组成 用C语言写
时间: 2024-10-13 14:12:49 浏览: 54
你可以使用C语言编写一个简单的函数来解决这个问题。这里是一个可能的解决方案:
```c
#include <stdio.h>
#include <string.h>
char* removeAdjacentDuplicates(char* str) {
int length = strlen(str);
if (length <= 1) {
return str;
}
char result[length];
int j = 0;
for (int i = 1; i < length; ++i) {
if (str[i] != str[i - 1]) {
result[j++] = str[i];
}
}
result[j] = '\0'; // 结束字符串
return result;
}
int main() {
char input[20001]; // 输入字符串的大小足够处理题目限制
fgets(input, sizeof(input), stdin); // 从标准输入读取字符串
input[strcspn(input, "\n")] = '\0'; // 去除fgets读取的换行符
while (removeAdjacentDuplicates(input) != input) { // 只要还有重复,就继续删除
printf("%s\n", input);
}
printf("Final string after removing all duplicates: %s\n", input);
return 0;
}
```
这个程序首先检查字符串是否为空或只包含一个字符,因为在这种情况下无需处理。然后它遍历字符串,每次遇到不同的字符就将其添加到结果数组中。当遍历结束后,将结果数组转换回字符串并返回。主函数会不断调用`removeAdjacentDuplicates`,直到字符串不再改变。
阅读全文