您的位置:首页 > 职场人生

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

2013-05-29 14:53 381 查看
 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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试 编程
相关文章推荐