【去哪儿】寻找Coder

题目描述

请设计一个高效算法,再给定的字符串数组中,找到包含"Coder"的字符串(不区分大小写),并将其作为一个新的数组返回。结果字符串的顺序按照"Coder"出现的次数递减排列,若两个串中"Coder"出现的次数相同,则保持他们在原数组中的位置关系。

给定一个字符串数组A和它的大小n,请返回结果数组。保证原数组大小小于等于300,其中每个串的长度小于等于200。同时保证一定存在包含coder的字符串。

测试样例:

["i am a coder","Coder Coder","Code"],3
返回:["Coder Coder","i am a coder"]
class Coder {
public:
    static bool cmp(pair<int,int> A, pair<int,int> B)
    {
        if(A.second!=B.second)
            return A.second>B.second;       
        return A.first<B.first;    
    }
    vector<string> findCoder(vector<string> A, int n) {
        // write code here
        if(n<1)
            return A;
        vector<pair<int,int>> table;
        string tar = "coder";
        for(int pos = 0; pos<n; pos++)
        {
            int count = 0;
            string item = A[pos];
            
            for(int i = 0;i<item.size();)
            {
                if(item[i] == 'c' || item[i] == 'C')
                {
                    int flag = i;
                    while(flag<item.size()&&flag<(i+5))
                    {
                        if(tolower(item[flag])==tolower(tar[flag-i]))
                            flag++;
                        else
                            break;
                    }
                    if((flag-i)==5)
                        count++;
                    i = flag;
                }
                else
                    i++;
            }
            
            if(count)
                table.push_back(make_pair(pos, count));
        }
        
        sort(table.begin(),table.end(),cmp);
        vector<string> ans;
        for(auto item:table)
            ans.push_back(A[item.first]);
        return ans;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值