2014 华为校招题 消除重复字符

                                                                   2014 华为校招题

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。

要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);

【输入】 pInputStr:  输入字符串
lInputLen:  输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;

【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

示例
输入:“deefd”        输出:“def”
输入:“afafafaf”     输出:“af”
输入:“pppppppp”     输出:“p”


如何求解: 解题方法: 题目大意很明了 删除重复的多余的字母

 思路:可以用hash 表来做的,建立 一个26维的hash 数组 用来记录各个数组是否出现 ,出现了true 没有出现false 

    其实也还是要进行遍历的 遍历输入字符串数组,然后没出现的输出 出现的跳过继续遍历往下走

代码:

#include<iostream>
#include<cstring>
using namespace std;

void stringFilter(const char *pInputstr, long Inputlen, char *pOutputstr)
{
    //三个参数 用ash 表的方式进行
    bool hashb[26] = {0} ; // 26 个英文字母
    int i , j ;
    for(i = 0 , j = 0 ; i < Inputlen ; i++)
    {
        if(hashb[pInputstr[i] - 'a'] == false ) //该字母从来没有 出现过
        {
            hashb[pInputstr[i] - 'a'] = true;
            pOutputstr[j++] = pInputstr[i];
        }
    }
    //最后因为是字符串所以最后一个是‘0’
    pOutputstr[j] = '\0';
}
int main()
{

    char pInputrChar[100], pOutputChar[100];
    while(cin>>pInputrChar)
    {
        int len = strlen(pInputrChar);
        stringFilter(pInputrChar, len , pOutputChar);
        cout<<pOutputChar<<endl;
    }
    return 0;
}


wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付 19.89元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值