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