我编写了以下代码,用于从给定的字符串中删除重复项,即如果输入ARRUN,则输出将为ARUN。
#include <bits/stdc++.h>
using namespace std;
char* removeDuplicates(string &s,int n){
char arr[n];
unordered_map<char,int> exists;
int index = 0;
for(int i=0;i<n;i++){
if(exists[s[i]]==0)
{
arr[index++] = s[i];
exists[s[i]]++;
}
}
return arr;
}
//driver code
int main(){
string str;
cin >> str;
cout<<removeDuplicates(str,str.length())<<endl;
return 0;
}
该代码完全不产生任何输出,但是,如果我使用
char arr[]
而不是字符串类,它可以很好地工作。
最佳答案
没有char arr[n]
常量或n
的情况下,您不能使用constexpr
。
您不需要map
。 set
就足够了。
请注意,map
和set
已经删除了重复项,然后您可以检查是否插入了任何元素,以按照与第一个相同的顺序获取新字符串,如下所示
#include<string>
#include<iostream>
#include<unordered_set>
std::string removeDuplicates(const std::string &s){
std::string arr;
std::unordered_set<char> exists;
for(const auto&el:s)
if(exists.insert(el).second) arr+=el;
return arr;
}
//driver code
int main(){
std::string str;
std::cin >> str;
std::cout<<removeDuplicates(str)<<std::endl;
return 0;
}
关于c++ - 从CPP中的字符串中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60247783/