具体场景:
删除小写字母字符串中重复字符。如果可以,优先删除重复字符中排在比他小字符前面的字符。
比如,输入:bbcacdww;输出:bacdw
思路:
1.先将字符的出现次数统计好。
2.再重新遍历一遍,如果出现次数是一次就直接拷贝到另一个数组,如果次数不是1,就直接进行下一次,然后次数--。
参考代码如下:
void DeletePar(char a[],int len) { int count[26] = {0}; for (int i = 0;i<len;i++) //计算每个字母出现的次数 count[a[i]-'a']++; int sum = 0; for (int i = 0;i<26;++i)//计算删除重复元素后的长度 { if(count[i]>0) sum+=1; } char *temp =new char[sum]; int num = 0; for (int i = 0;i<len;++i) { if (count[a[i]-'a']==1) temp[num++] = a[i]; else if(count[a[i]-'a']>1) count[a[i]-'a']--; if(num > sum) break; } for (int i = 0;i<sum;++i) a[i] = temp[i]; a[sum] = 0; }
测试代码为:
char a[]={"abcdbca"}; char b[] = {"bbcacdww"}; int len = strlen(a); int lenb = strlen(b); DeletePar(a,len); DeletePar(b,len); cout<<"删除后"<<a<<endl; cout<<"删除后"<<b<<endl;
结果为: