第一周作业--长度为2的字串

发布时间 2023-04-12 16:50:15作者: 小白船、

题目描述

给你一个长度为 n 的由大写的英文字母组成的字符串,请你找出出现频率最高的长度为2的子串。

输入格式

包括两行。第一行是一个正整数n,表示字符串长度。第二行是长度为n的大写英文字母组成的字符串。(2<=n<=100)

输出格式

包括一行。一个长度为2的字符串,该字符串为输入字符串的子串,在输入字符串中出现次数最多。若有多个出现频率相同且最高的子串,输出第一次出现的那个子串。

输入输出样例

输入 
7
ABACABA

输出 
AB


首先看到题目想到用map映射来做但是因为不熟练写到后面写不下去了,于是使用数组和c++自带的函数来解题。
题目要求是长度为2的子串,可以使用substr()来截取子串。并用find()函数来查找并记录位置
代码如下:

#include<bits/stdc++.h>
using namespace std;
int cnt[100];
int main()
{
int n,max=-1;
string s;
cin>>n;
cin>>s;
for(int i=0;i<n-1;++i){
string a=s.substr(i,2);//从s中截取长度为2的子串
int f=s.find(a);//查找各个子串在s中的位置
while(f!=-1){//循环到找不到子串为止
cnt[i]++;//找到一次便++,记录次数
f=s.find(a,f+1);从找到的下一位置继续寻找
}
if(cnt[i]>max){
max=cnt[i];//找到出现频率最大的子串
}
}
for(int i=0;i<n-1;++i){
if(cnt[i]==max){
string a=s.substr(i,2);//出现最多次数的子串
cout<<a<<endl;//输出
break;
}
}
return 0;
}