直接用string类里面的一些函数
先排序,然后用最短的那个字符串的子串跟其他字符串的子串比较。。。
代码如下:
1 #include <iostream> 2 #include <string> 3 #include <algorithm> 4 using namespace std; 5 6 bool cmp(const string& a,const string& b) 7 { 8 return a.size() < b.size(); 9 } 10 11 void inverse(string& aim) 12 { 13 string::size_type size = aim.size(),i = 0; 14 char ch; 15 while(i != size / 2) 16 { 17 ch = aim[i]; 18 aim[i] = aim[size - 1 - i]; 19 aim[size - 1 - i] = ch; 20 i ++; 21 } 22 } 23 24 bool search(string a,string& b,int len) 25 { 26 int size = b.size(); 27 for(int i = 0;i <= size - len;++ i) 28 { 29 if(!a.compare(0,len,b,i,len)) 30 return true; 31 } 32 33 inverse(a); 34 for(int i = 0;i <= size - len ;++ i) 35 { 36 if(!a.compare(0,len,b,i,len)) 37 return true; 38 } 39 40 return false; 41 } 42 43 int main() 44 { 45 int cas; 46 int n; 47 cin >> cas; 48 while(cas --) 49 { 50 cin >> n; 51 string str[150]; 52 for(int i = 0;i < n;i ++) 53 { 54 cin >> str[i]; 55 } 56 57 sort(str,str + n,cmp); 58 59 int len = str[0].size(); 60 int maxlen = 0; 61 for(int i = 1;i <= len;++ i) 62 { 63 int flag = 0; 64 for(int j = 0;!flag && j < len - i + 1;++ j) 65 { 66 string temp = str[0].substr(j,i); 67 int k = 1; 68 for(;k < n;++ k) 69 { 70 if(!search(temp,str[k],i)) 71 { 72 break; 73 } 74 } 75 if(k == n) 76 flag = 1; 77 } 78 if(!flag) 79 break; 80 else 81 { 82 maxlen = i; 83 } 84 } 85 86 cout << maxlen << endl; 87 } 88 89 return 0; 90 }