给出一个小写字母构成的字符串,删除相同且相邻的字母
时间: 2024-09-19 08:09:02 浏览: 60
当你有一个仅由小写字母组成的字符串时,可以采用滑动窗口算法(Sliding Window Algorithm)或者双指针技巧来删除相邻且相同的字符。这里是一个简单的Python示例:
```python
def remove_adjacent_chars(s):
# 使用一个列表来存储不连续的不同字符
result = [s[0]]
i = 1
while i < len(s):
if s[i] != s[i - 1]:
result.append(s[i])
i += 1
return ''.join(result)
# 测试例子
input_str = "aabbcc"
output_str = remove_adjacent_chars(input_str)
print(f"原始字符串: {input_str}")
print(f"删除相邻后的字符串: {output_str}")
```
这个函数遍历输入字符串`s`,如果当前字符与前一个不同,则将其添加到结果列表中。最后将结果列表连接成新的字符串返回。
相关问题
给出一个小写字母构成的字符串,删除相同且相邻的字母使用c语言
在C语言中,你可以使用一个简单的循环结构以及两个指针来实现这个功能。这里是一个基本的示例,假设输入字符串存储在`str[]`数组中,长度为`len`:
```c
#include <stdio.h>
#include <string.h>
void remove_adjacent_chars(char str[], int len) {
if (len <= 1) return; // 如果字符串只有一个字符或空,则无需处理
int i = 0, j = 1;
while (j < len) {
// 如果当前字符不等于前一个字符,或者它们之间有其他字符
if (str[i] != str[j] || (i > 0 && str[i - 1] != str[j])) {
str[i++] = str[j]; // 移动有效字符到新位置
}
j++; // 指针后移
}
str[i] = '\0'; // 确保字符串以'\0'结束,即使只移动了一个字符
}
int main() {
char input[100];
printf("请输入小写字母组成的字符串: ");
fgets(input, sizeof(input), stdin); // 从用户获取输入,忽略换行符
input[strcspn(input, "\n")] = '\0'; // 删除fgets读取的换行符
remove_adjacent_chars(input, strlen(input));
printf("删除相邻重复后的字符串: %s\n", input);
return 0;
}
```
在这个程序中,`remove_adjacent_chars`函数会遍历输入字符串,如果发现连续相同的字符,就跳过它们。注意,这个例子假设输入字符串只有小写字母。
cpp输入一个小写字符串,删除所有相同且相邻的小写字母。如输入dbbdut最后变成ut
在C++中,要实现这个功能,可以使用双指针以及一个临时变量。基本步骤是遍历字符串,比较当前字符与前一个字符是否相等。如果不同,则添加到结果字符串;如果相同,则检查下一个字符是否也相同,只有当连续两个相同的字符都被找到时才跳过,直到遇到不同的字符。以下是简单的代码示例:
```cpp
#include <iostream>
#include <string>
std::string removeAdjacentDuplicates(std::string input) {
if (input.empty()) return input; // 空字符串直接返回
std::string result = "";
char prevChar = input[0]; // 初始化前一个字符
for (char currChar : input) {
if (currChar != prevChar) { // 遇到不同字符
result += currChar;
}
prevChar = currChar; // 更新前一个字符
}
return result;
}
int main() {
std::string str = "dbbdut";
std::cout << removeAdjacentDuplicates(str) << std::endl; // 输出:ut
return 0;
}
阅读全文