1.3 设计一个算法移除字符串中的重复字符,算法不使用额外缓冲。并对你的算法设计测试用例。

 1.3 设计一个算法移除字符串中的重复字符,算法不使用额外缓冲。并对你的算法设计测试用例。注意:一两个变量使用当是OK的,但是复制整个数组就不行了。

解答(1)

无字符串缓冲算法

1. 对每个字符判断是否为重复字符。

2. 重复字符直接跳过,非重复字符记录。

时间复杂度为O(n^2)

void RemoveDuplicates(char *str,int len)
{
	if (NULL==str) return;
	if (len<2) return;
	int i,j;
	int tail=1;
    for (i=1;i<len;i++)
    {
		for (j=0;j<tail;j++)
		{
			if (str[i]==str[j])
			{
				break;
			}
		}
		if (j==tail)
		{
			str[tail]=str[i];
			tail++;
		}
    }
	str[tail]='\0';//或者str[tail]=0
}


测试用例:

1. 无重复字符:abcd

2. 全重复字符:aaaa

3. 无效字符串:null

4. 连续重复字符串:aaaabbbb

5. 非连续重复字符串:abcabc

字符串缓冲算法:

void RemoveDuplicates(char *str,int len)
{
	if (NULL==str) return;
	if (len<2) return;
	int i;
	bool hit[256];
	for (i=0;i<256;i++)
	{
		hit[i]=false;
	}
	int tail=1;
	hit[str[0]]=true;
    for (i=1;i<len;i++)
    {
	 if (!hit[str[i]])
	 {
        str[tail]=str[i];
		tail++;
		hit[str[i]]=true;

	 }
    }
	str[tail]='\0';//或者str[tail]=0
}


1.  无重复 字符:abcd

2. 全重复字符:aaaa

3. 无效字符串:null

4. 空字符串:empty

5.连续重复字符串:aaaabbbb

6. 非连续重复字符串:abcabc


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值