本文为大家分享了华为2014笔试4道算法题,供大家参考,具体内容如下
1.通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:voidstringFilter(constchar*pInputStr,longlInputLen,char*pOutputStr);
【输入】pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“deefd” 输出:“def”
输入:“afafafaf” 输出:“af”
输入:“pppppppp” 输出:“p”
main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出
当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。
一定要保证编译运行不受影响
//////////////////////////////////////////////////////////////////////////华为第一题19:19-19:3617分钟
#include
#include
usingnamespacestd;
boolg_flag[26];
voidstringFilter(constchar*pInputStr,longlInputLen,char*pOutputStr)
{
assert(pInputStr!=NULL);
inti=0;
if(pInputStr==NULL||lInputLen<=1)
{
return;
}
constchar*p=pInputStr;
while(*p!='\0')
{
if(g_flag[(*p-'a')])
{
p++;
}else{
pOutputStr[i++]=*p;
g_flag[*p-'a']=1;
p++;
}
}
pOutputStr[i]='\0';
}
intmain()
{
memset(g_flag,0,sizeof(g_flag));
charinput[]="abacacde";
char*output=newchar[strlen(input)+1];
stringFilter(input,strlen(input),output);
cout<