寻找Coder(去哪儿)

2016/05/07 C和C++基础

题目描述

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

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

测试样例:

[“i am a coder”,”Coder Coder”,”Code”],3

返回:[“Coder Coder”,”i am a coder”]

程序代码

#include <iostream>
#include <vector>
#include <string>

using namespace std;

struct info{
	int Id;
	int num;
};

bool ifcoder(string str){
	if((str[1]=='o'||str[1]=='O')&&(str[2]=='d'||str[2]=='D')&&
		(str[3]=='e'||str[3]=='E')&&(str[4]=='r'||str[4]=='R')){
		return true;
	}else{
		return false;
	}
}

void sort(vector<info> &infov){
	int len=infov.size();
	for(int i=0;i<len-1;i++){
		for(int j=0;j<len-i-1;j++){
			if(infov[j].num<infov[j+1].num){
				info t;
				t.Id=infov[j].Id;
				t.num=infov[j].num;
				infov[j].Id=infov[j+1].Id;
				infov[j].num=infov[j+1].num;
				infov[j+1].Id=t.Id;
				infov[j+1].num=t.num;
			}
		}
	}
}

vector<string> findCoder(vector<string> A,int n){
	vector<info> infov;
	for(int i=0;i<n;i++){
		int len=A[i].size();
		int s=0;
		for(int j=0;j<len;j++){
			if((A[i][j]=='c'||A[i][j]=='C')&&(j+5<=len)){
				string tempstr=A[i].substr(j,5);
				if(ifcoder(tempstr)){
					s++;
				}
			}
		}
		if(s>0){
			info infom;
			infom.Id=i;
			infom.num=s;
			infov.push_back(infom);
		}
	}
	sort(infov);
	vector<string> r;
	for(int i=0;i<infov.size();i++){
		r.push_back(A[infov[i].Id]);
		cout<<A[infov[i].Id]<<endl;
	}
	return r;
}


int main(){
	vector<string> A;
	int n=4;
	A.push_back("i am a coder");
	A.push_back("Coder Coder");
	A.push_back("Code");
	A.push_back("codER adf dada coder erwt coder");
	findCoder(A,n);

	system("pause");
}

Search

    Post Directory