codeforce-----Two-gram

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.InputThe 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 string ss consisting of nn capital Latin letters.OutputPrint 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.Examples
Input
7
ABACABA
Output
AB
Input
5
ZZZAA
Output
ZZ
NoteIn 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.

题目大意:求出现次数最多的two-gram的子串,一个two-gram串是指在原字符串中出现的连续的两个字母

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
using namespace std;
const int N = 30;
int f[N][N];
int main(){
	int n;
	string str;
		cin >> n;
	cin >> str;
		for (int i = 0; i < n - 1; i ++){
		int x = str[i] - 'A';
		int y = str[i + 1] - 'A';
		f[x][y] ++;
	}
		int maxd = 0, a = 0, b = 0;
	for (int i = 0; i < 26; i ++)
	    for (int j = 0; j < 26; j ++){
	    	if (maxd < f[i][j]){
	    		a = i;
	    		b = j;
	    		maxd = f[i][j];
			}
		}
	  printf("%c%c\n", a + 'A', b + 'A') ;
	   return 0;
}
发布了106 篇原创文章 · 获赞 67 · 访问量 5411

猜你喜欢

转载自blog.csdn.net/qq_45772483/article/details/105050725
two