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

C/C++ 专栏收录该内容
16 篇文章 0 订阅

                                                                   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;
}


  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值