攜程技術類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;
}

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