题目描述
请设计一个高效算法,再给定的字符串数组中,找到包含"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;
}
};