美团算法岗笔试的编程题??

-------------------------------------------------------------------------------------------------
更新第一题的代码,楼主凭回忆写的,不保证对!!!
-------------------------------------------------------------------------------------------------

bool cmp(string s1, string s2){
	int i=0, j=0;
	while(i<s1.size() && j<s2.size()){
		if(s1[i] > s2[j]) return true;
		else if(s1[i] < s2[j]) return false;
		++i; ++j;
	}
	if(i==s1.size()) return true;
	return false;
}

void merge(vector<string> &nums, vector<string> &aux, int start, int mid, int end){
	int i = start, j = mid + 1, k = start;
	while (i <= mid && j <= end){ // 两边都还没结束
		if (cmp(nums[i], nums[j])) aux[k++] = nums[i++];
		else aux[k++] = nums[j++];
	}
	while(j <= end) aux[k++] = nums[j++]; // 左半边结束了
	while(i <= mid) aux[k++] = nums[i++]; // 右半边结束了
	for (int i = start; i <= end; i++)
		nums[i] = aux[i];
}

void Divide(vector<string> &nums, vector<string> &aux, int start, int end) {
	if (start >= end) return;
	int mid = (start + end) / 2;
	Divide(nums, aux, start, mid);
	Divide(nums, aux, mid + 1, end);
	merge(nums, aux, start, mid, end);
}

int main(){
	string s; cin>>s;
	string tmp="";
	istringstream in(s);
	vector<string> nums;
	while(getline(in, tmp, ',')) nums.push_back(tmp);
	vector<string> aux(nums.size(), "");
	Divide(nums, aux, 0, nums.size()-1);
	for(int i=0; i<nums.size(); ++i){
		if(i==0) cout<<nums[i];
		else{
			cout<<","<<nums[i];
		}
	}
	return 0;
} 
-------------------------------------------------------------------------------------------------
分割线
-------------------------------------------------------------------------------------------------


怎么说呢,感觉编程题没啥难度嘛。。两道都挺简单的靠暴力就能过去了。。。早知道多花点时间把选择题做好了😂😂😂

第一题:字符串排序(ac)
这没啥好说的,既然题目要求不能用sort函数,就自己写一遍归并排序好了,不过同时把比较器改一下;
代码忘保存了,不过就是归并排序的模板也没啥必要贴了。。

第二题:求两两字符串的公共前缀长度(ac)
大意是给你一个数组arr,每个元素是一个string,然后给你很多两个一组的索引x,y求arr[x]和arr[y]的最长公共前缀长度。
最原始的暴力解法即可ac。。。
int main() {
    int n; cin>>n;
	vector<string> arr(n, "");
	for(int i=0; i<n; ++i){
		cin >> arr[i];
	}
	int x,y;
	while(cin>>x>>y){
		--x;--y;
		if(x>=0 && x<=n-1 && y>=0 && y<=n-1){
			string s1=arr[x], s2=arr[y];
			int i=0, j=0, cnt=0;
			while(i<s1.size() && j<s2.size() && s1[i] == s2[j]){
				++cnt;
				++i;++j;
			}
			cout<<cnt<<endl;
		}
	}
	return 0;
}


#笔试题目##秋招##美团#
全部评论
我们后台研发两个算法 去火星送外卖。。。。
点赞 回复 分享
发布于 2019-08-22 16:29
我感觉这个编程题在和我开玩笑
点赞 回复 分享
发布于 2019-08-22 16:22
不走心的出题人😂
点赞 回复 分享
发布于 2019-08-22 16:40
选择题靠缘分了
点赞 回复 分享
发布于 2019-08-22 16:47
为毛我们后台的编程题这么蛋疼?
点赞 回复 分享
发布于 2019-08-22 16:57
大佬能分享下第一题的代码吗
点赞 回复 分享
发布于 2019-08-22 17:18

相关推荐

一颗宏心:华为HR晚上过了十二点后还给我法消息。
点赞 评论 收藏
分享
点赞 8 评论
分享
牛客网
牛客企业服务