ブルーブリッジカップ文字列統計C++アルゴリズムトレーニングHERODINGブルーブリッジカップの道
5583 ワード
リソース制限時間制限:1.0 sメモリ制限:512.0 MBの問題は、所与の長さnの文字列Sを記述し、もう一つの数字Lがあり、統計長はLの出現回数が最も多いサブ列(異なる出現は交差することができる)より大きく、複数があれば、出力が最も長い場合、出力がまだ複数であれば、出力が最初に最も早く現れる.フォーマットの最初の行の数値Lを入力します.2行目は文字列Sである.Lは0より大きく、Sの長さを超えない.フォーマットの1行、タイトルに要求される文字列を出力します.
入力サンプル1:4 bbaabbaaa
出力サンプル1:bbaa
入力サンプル2:2 bbaabbaaa
出力サンプル2:aaデータ規模と約定n<=60 Sのすべての文字は小文字英字である.ヒントすべての可能なサブストリングを列挙し、出現回数を統計し、条件に合致するものを探し出す.
問題を解く構想:問題のヒントはすでにはっきりしていて、列挙は終わりました!列挙の構想は3つのforサイクルであり、第1層のforサイクルはサブ列の長さを制限し、第2層のforサイクルはその長さのすべてのサブ列を遍歴し、第3層のforサイクルはそのサブ列と同じすべてのサブ列を検索し、数を統計する.コードは次のとおりです.
入力サンプル1:4 bbaabbaaa
出力サンプル1:bbaa
入力サンプル2:2 bbaabbaaa
出力サンプル2:aaデータ規模と約定n<=60 Sのすべての文字は小文字英字である.ヒントすべての可能なサブストリングを列挙し、出現回数を統計し、条件に合致するものを探し出す.
問題を解く構想:問題のヒントはすでにはっきりしていて、列挙は終わりました!列挙の構想は3つのforサイクルであり、第1層のforサイクルはサブ列の長さを制限し、第2層のforサイクルはその長さのすべてのサブ列を遍歴し、第3層のforサイクルはそのサブ列と同じすべてのサブ列を検索し、数を統計する.コードは次のとおりです.
#include
using namespace std;
int main() {
int n, i, j, k;
int num = 0;//
string S, str1, str2, temp;// str1 ,st2 ,temp str1
cin >> n >> S;
int len = S.length();//
for (i = len; i >= n; i --) {//
for (j = 0; j < len - i; j ++) {//
int t_num = 0;
str1.assign(S, j, i);// temp S j i
for (k = 0; k < len - i; k ++){
temp.assign(S, k, i);// temp S k i
if(temp == str1){
t_num ++;
}
}
if (t_num > num) {
num = t_num;
str2 = str1;
}
}
}
cout << str2;
return 0;
}