阿里-笔试-评测
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里-笔试-评测相关的知识,希望对你有一定的参考价值。
忘了具体是啥题目了。类似与求最小编辑距离。
第一行:输入的行数:
后面是输入的记录和关键字:
如:第一行:2
后面:search_dress_in_11:30_search_drese_in_11:31 dress
search_dress_in_11:30_search_drese_in_11:31 glass
输出:最小编辑距离为1的字符串的起始位置,没有返回-1
7 29
-1
反正我是不知道我怎么错的。即使是输出格式,也不可能一个负用例都没有把。很奇怪。
1 // 2 // Created by ProMoriarty on 2017/8/18. 3 // 4 5 #include <iostream> 6 #include<cstdio> 7 #include<math.h> 8 #include <algorithm> 9 #include <vector> 10 #include <string> 11 using namespace std; 12 int edit(string str1, string str2) 13 { 14 int max1 = str1.size(); 15 int max2 = str2.size(); 16 17 int **ptr = new int*[max1 + 1]; 18 for(int i = 0; i < max1 + 1 ;i++) 19 { 20 ptr[i] = new int[max2 + 1]; 21 } 22 23 for(int i = 0 ;i < max1 + 1 ;i++) 24 { 25 ptr[i][0] = i; 26 } 27 28 for(int i = 0 ;i < max2 + 1;i++) 29 { 30 ptr[0][i] = i; 31 } 32 33 for(int i = 1 ;i < max1 + 1 ;i++) 34 { 35 for(int j = 1 ;j< max2 + 1; j++) 36 { 37 int d; 38 int temp = min(ptr[i-1][j] + 1, ptr[i][j-1] + 1); 39 if(str1[i-1] == str2[j-1]) 40 { 41 d = 0 ; 42 } 43 else 44 { 45 d = 1 ; 46 } 47 ptr[i][j] = min(temp, ptr[i-1][j-1] + d); 48 } 49 } 50 51 // for(int i = 0 ;i < max1 + 1 ;i++) 52 // { 53 // for(int j = 0; j< max2 + 1; j++) 54 // { 55 // cout << ptr[i][j] << " " ; 56 // } 57 // cout << endl; 58 // } 59 int dis = ptr[max1][max2]; 60 61 for(int i = 0; i < max1 + 1; i++) 62 { 63 delete[] ptr[i]; 64 ptr[i] = NULL; 65 } 66 67 delete[] ptr; 68 ptr = NULL; 69 70 return dis; 71 } 72 73 int main() 74 { 75 76 int count = 0; 77 int n; 78 scanf("%d",&n); 79 for(int i=0;i<n;i++){ 80 string str1,str2; 81 cin>>str2; 82 cin>>str1; 83 int flag = 1; 84 for(unsigned int j=0;j<str2.size()-str1.size();j++){ 85 string temp(str2,j,str1.size()); 86 int r = edit(str1,temp); 87 if(r<=1){ 88 flag = 0; 89 cout<<j<<" "; 90 } 91 92 } 93 if(flag==0) 94 cout<<endl; 95 if(flag==1) 96 cout<<-1<<endl; 97 } 98 return 0; 99 }
以上是关于阿里-笔试-评测的主要内容,如果未能解决你的问题,请参考以下文章