携程技术类2018届春招笔试编程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gxh27954/article/details/70132376


携程技术类2018届春招 安卓开发工程师 在线考试
编程题|20分1/1

有序字符串搜索

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 204800KB;其他语言 729088KB
题目描述:

给定一些字符串,请写一个算法,从中搜索出包含您输入的字符序列的那些字符串,按匹配度的高低排序输出。没有任何一个字符串匹配上,输出-1。

字符串源source 如下:

"AB",
"ABC",
"ACB",
"ABCD",
"ADBCF",
"ABDCF",
"ABDC",
"ABDFCG",
"ABDFGC",
"ABDEFG",
"GABCEFG"


若输入查找的有序字符序列为"ABC",则运算结果如下(请注意结果的排序规则)。

ABC         (匹配    ABC)(完全匹配上,匹配度最大)

ABCD      (匹配    ABC.)

ABDC      (匹配    AB.C)

ABDCF    (匹配    AB.C.)

ABDFCG (匹配    AB..C.)

ABDFGC (匹配    AB...C)

ADBCF    (匹配   A.BC.)

GABCEFG(匹配  .ABC...)

输入

您需要查找的字符串

样例输入

ABC

<div class="outputarea yangli ng-scope" ng-if="model.ques.questype==6 && model.ques.outputSample != null && model.ques.outputSample!=''" "="" style="box-sizing: border-box; margin: 0px; padding: 0px;">
样例输出

ABC 
ABCD 

ABDC 

ABDCF  

ABDFCG 

ABDFGC 

ADBCF    

GABCEFG


第一次这么快ak啊~~才8点20多。。。嗯,等考完再把代码放出吧~~

一开始没有看懂题目,看懂了就好办了。我是用暴力匹配,匹配上了标记为1,没有匹配上标记为0,补全9位(后面是补1)。

比如给的例子ABC,那么对于我来说就是

ABC            111111111

ABCD         111011111

ABDC         110111111

ABDCF        110101111

ABDFCG     110010111

ABDFGC     110001111

ADBCF       101101111

GABCEFG   011100011


所以其实就是暴力的去匹配resources,然后转成01串,排序输出就ok~

见代码~~

#include<bits/stdc++.h>
using namespace std;
 
struct node{
    int a;
    string b;
};
vector < string > res;
vector <  node > v;
 
bool cmp( const node &v1, const node &v2)//注意:本函数的参数的类型一定要与vector中元素的类型一致
{
    return v1.b > v2.b;//升序排列
}
/*请完成下面这个函数,实现题目要求的功能*/
/*当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^ */
/******************************开始写代码******************************/
void doFilter(string a)
{
    int length=a.length();
    for(int i=0;i<res.size();i++)
    {
        int k=0;
        string b=res[i];
        int len=b.length();
        string ans="";
        int f=0;
        for(int j=0;j<len;j++)
        {
            if(b[j]==a[k])
            {
                ans=ans+"1";
                k++;
            }
            else
            {
                ans=ans+"0";
            }
            if(k==length)
            {
                f=1;
                for(int t=j+1;t<len;t++)
                {
                    ans=ans+"0";
                }
                break;
            }
        }
        if(f==0)
        {
            continue;
        }
        int si=ans.length();
        for(int j=si;j<=8;j++)
        {
            ans=ans+"1";
        }
        node tt;
        tt.a=i;
        tt.b=ans;
        v.push_back(tt);
    }
    if(v.size()==0)
    {
        cout<<-1<<endl;
        return;
    }
    sort(v.begin(),v.end(),cmp);
    for(int i=0;i<v.size();i++)
    {
        int k=v[i].a;
        cout<<res[k]<<endl;    }
}
/******************************结束写代码******************************/
 
 
int main()
{
 
    res.push_back("AB");
    res.push_back("ABC");
    res.push_back("ACB");
    res.push_back("ABCD");
    res.push_back("ADBCF");
    res.push_back("ABDCF");
    res.push_back("ABDC");
    res.push_back("ABDFCG");
    res.push_back("ABDFGC");
    res.push_back("ABDEFG");
    res.push_back("GABCEFG");
 
    string a;
    cin>>a;
    doFilter(a);
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章