华为笔试题,字符串特征值匹配 C++ 已AC

 2020/9/6 笔试题 c++ 已AC

题目:

先给你若干个个字符串,一个数字(0到9)以及一个匹配字符串,每个字符串中的字符小于那个数字就作为特征值,然后判断和匹配字符串的特征值相同的字符串

输入:

1234562215        //特征值为123221

155154455         //11

54155                //1

3                      //这就i是特征值,

15896562           //12   这个是最后一个字符串根据倒数第2行的特征值3  确定的自己的特征值   现在我们要去其他字符串中的特征值找,是不是包含12的特征值,如果包含,那么对应的那个字符串就可以和最后一行的特征值进行匹配,如果没有,就不匹配,再把匹配的字符串全部输出

输出:

1234562215    //因为该字符串的特征值为 123221   这个特征值中包含最后一行字符串的特征值12  所以,可以匹配

 

 

 

#include <bits/stdc++.h>
using namespace std;

int main()
{
    vector<string> input;
    string str; //这个str就是用来存储倒数第二行的那个字符 也是我们每次要根据这个值去确定每个字符串的特征值

    while(getline(cin,str))
    {
        题目没有给n值,不知道要输入多少行?但是说了倒数第二行为1-9,
        /// 所有接受到字符串大小为1的时候就跳出接收,但是,最后一个字符串还没有接收到
        if(str.size()==1)
        {
            break;
        }
        input.push_back(str);
    }

    //获取现在inout的长度
    size_t inputlen = input.size();
    //最后一行还没有接受到,所以单独接受保存在temp中
    string temp;
    cin>>temp;

    //所有的输入已经到为了 。我们只需要根据特征值遍历来找了
    //怎么获得特征值? 我这里想到的是将每个字符串的特征值和该字符串进行绑定,
    //所有我定义了一个二位数组 输入多少个字符串就定义多少行,只绑定两个东西,所有只需要2列
    vector<vector<string>> mp(inputlen+1,vector<string> (2));
    size_t count=0;     //表示处理第count个字符串
    for(auto i:input)
    {
        //现在在i是一个字符串
        //定义strtemp来当作每个字符串的特征值
        string strtemp;
        for(auto j : i)
        {
            //j是每个字符串的每一个字符
            //由于上面说了str是接收的倒数第二个字符串,只有一个字符,
            //我们根据这个去比较,一个字符串中比他小的,提出来
            if(j < str[0])
            {
                strtemp+=j;
            }
        }
        //找到了i这个字符串的特征值 保存在strtemp,然后将这个特征值和这个字符串进行绑定
        mp[count][0 ] = i;
        mp[count][1 ] = strtemp;
        count++;
    }

    //对最后一行的这个字符串找特征值
    string last ;
    for(auto i : temp)
    {
        if(i < str[0])
        {
            last+=i;
        }
    }
    //这里的last 就是要匹配的特征值了;

    vector<string> reslut;  //用来记录最终结果
    for(size_t i =0; i<mp.size();i++)
    {
        //我们在所有的字符串的特征值中去找含有与最后一个字符串相同的特征值的字符串  (绕口)
        if(mp[i][1].find(last)!=string::npos)
        {
            //找到之后,将这个特征值所对应的字符串加入到我们的结果中
            reslut.push_back(mp[i][0]);     
        }
    }
    //最后输出结果
    for(auto i:reslut)
    {
        cout<<i<<endl;
    }

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值