주제 :
샘플 입력 :
3
2
GATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
3
GATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATA
GATACTAGATACTAGATACTAGATACTAAAGGAAAGGGAAAAGGGGAAAAAGGGGGAAAA
GATACCAGATACCAGATACCAGATACCAAAGGAAAGGGAAAAGGGGAAAAAGGGGGAAAA
3
CATCATCATCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
ACATCATCATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACATCATCATTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
샘플 출력 :
no significant commonalities
AGATAC
CATCATCAT
아마 질문의 의미
캐릭터가 큰 경우가 또는 공통 출력 동일보다 덜 3m 열 출력보다 크게 공통점 경우 N 입력 그룹은, 상기 문자열의 m 각각 최대 문자열 공개 문자열 m, 최대의 공통 부분을 찾을 문자열이 문자열 인 경우, 복수의 동일한 최소 갔다.
브 루트 포스 아이디어와 알고리즘 :
#include <bits/stdc++.h>
using namespace std;
int main ( ) {
int n, m;
char str[ 11 ] [ 61 ] , x[ 61 ] , y[ 61 ] ;
int res_len, str_len, temp, i, j, k, t;
cin>> n;
while ( n-- ) {
res_len= 0 ;
cin>> m;
for ( int i= 0 ; i< m; i++ ) cin>> str[ i] ;
str_len= strlen ( str[ 0 ] ) ;
for ( i= 1 ; i<= str_len; i++ ) {
for ( j= 0 ; j+ i- 1 < str_len; j++ ) {
for ( k= 0 ; k< i; k++ ) {
x[ k] = str[ 0 ] [ j+ k] ;
}
x[ k] = '\0' ;
for ( k= 0 ; k< m; k++ ) {
if ( strstr ( str[ k] , x) == NULL ) break ;
}
if ( k>= m) {
temp= strlen ( x) ;
if ( temp== res_len) {
for ( t= 0 ; t< res_len; t++ ) {
if ( y[ t] > x[ t] ) {
for ( t= 0 ; t<= res_len; t++ ) y[ t] = x[ t] ;
break ;
}
}
}
if ( temp> res_len) {
res_len= temp;
for ( t= 0 ; t<= res_len; t++ ) y[ t] = x[ t] ;
}
}
}
}
if ( res_len>= 3 ) cout<< y<< endl;
else cout<< "no significant commonalities" << endl;
}
return 0 ;
}
특별 참고 사항 :
사실, 이것은이다 때문에 단일 문자 이송 60 회 수행하고, 1,하지만 또는 문자열의 복수로 구성되어, 2와 동일보다 큰 경우에, I-1 CI + J 할 변수 I에 라인에. 예를 들면,이 문자열에서 문자가 ABCD 순회 IS A-> B-> C-> D 4 회 수행. 두 문자가 AB-> BC->가되었다 그러나, CD는 세 번 정도됩니다 횡단 않습니다.