美团算法岗笔试的编程题??
-------------------------------------------------------------------------------------------------
更新第一题的代码,楼主凭回忆写的,不保证对!!!
-------------------------------------------------------------------------------------------------
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; }