Two-gram is an ordered pair (i.e. string of length two) of capital Latin letters. For example, "AZ", "AA", "ZA" — three distinct two-grams.
You are given a string ss consisting of nn capital Latin letters. Your task is to find any two-gram contained in the given string as a substring(i.e. two consecutive characters of the string) maximal number of times. For example, for string ss = "BBAABBBA" the answer is two-gram "BB", which contained in ss three times. In other words, find any most frequent two-gram.
Note that occurrences of the two-gram can overlap with each other.
The first line of the input contains integer number nn (2≤n≤1002≤n≤100) — the length of string ss. The second line of the input contains the stringss consisting of nn capital Latin letters.
Print the only line containing exactly two capital Latin letters — any two-gram contained in the given string ss as a substring (i.e. two consecutive characters of the string) maximal number of times.
7 ABACABA
AB
5 ZZZAA
ZZ
In the first example "BA" is also valid answer.
In the second example the only two-gram "ZZ" can be printed because it contained in the string "ZZZAA" two times.
统计字符串相邻两个字母出现的个数,输出出现最多的两个字母组合
代码:
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int main()
{
int n, Max=0;
int a, b;
int dp[30][30] = { 0 };
string str;
cin >> n >> str;
for (int i = 0; i < n - 1; i++)
{
int x = str[i] - 'A';
int y = str[i + 1] - 'A';
dp[x][y]++;
}
for (int i = 0; i < 26; i++)
{
for (int j = 0; j < 26; j++)
{
if (Max < dp[i][j])
{
Max = dp[i][j];
a = i;
b = j;
}
}
}
printf("%c%c\n", a + 'A', b + 'A');
return 0;
}
用二维数组记录字母出现的次数