删除小写字母字符串中重复字符

具体场景:

删除小写字母字符串中重复字符。如果可以,优先删除重复字符中排在比他小字符前面的字符。

比如,输入: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;


结果为:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值