C++解决从左到右对字符串中每个字符删除其后所有相同的字符,只留下第一次出现的那一个
时间: 2024-05-10 12:14:33 浏览: 47
可以使用双指针和哈希表来解决这个问题。
具体实现方法如下:
1. 定义左右两个指针 l 和 r,初始值都为 0。
2. 定义一个哈希表 map,用来记录每个字符是否出现过。
3. 开始遍历字符串,当 r 指向的字符第一次出现时,将其记录在哈希表中,并将该字符复制到 l 指向的位置上,然后 l 和 r 同时右移一位。
4. 如果 r 指向的字符已经出现过,那么直接右移 r,直到找到一个未出现过的字符为止。
5. 最后将 l 指向的位置作为新字符串的结尾。
代码实现如下:
```c
void removeDuplicates(char* s) {
int l = 0, r = 0;
char map[256] = {0};
while (s[r] != '\0') {
if (map[s[r]] == 0) {
map[s[r]] = 1;
s[l++] = s[r];
} else {
r++;
}
}
s[l] = '\0';
}
```
这段代码的时间复杂度为 O(n),空间复杂度为 O(1)。
相关问题
用c++写一个程序,要求:从左往右对字符串中每个字符删除其后所有相同字符,只留下第一次出现的那一个
好的,我可以为你编写这个程序。以下是c++代码:
```c++
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char str[100];
cin>>str;
int len=strlen(str);
for(int i=0;i<len;i++)
{
if(str[i]!=str[i+1]) //如果当前字符与下一个字符不相同
{
cout<<str[i]; //输出当前字符
}
}
return 0;
}
```
这个程序可以实现你的要求。输入一个字符串,然后从左往右遍历字符串中的每个字符,若当前字符与下一个字符不相同,就输出当前字符。因为字符串中相同的字符都挨在一起,所以只需要输出第一次出现的那个字符即可。
阅读全文