蓝桥杯 ALGO-87 字串统计

本文介绍了一种算法,用于从给定字符串中找出长度大于等于指定数值且出现次数最多的子串,若有多个符合条件的子串,则优先输出最长且首次出现的子串。通过使用vector数组保存所有可能的子串,并利用book数组统计各子串的出现频率,最终找到满足条件的最适子串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:给定一个字符串和数字n,求出长度大于等于n出现次数最多的字符串,如果有多个字符串,输出最长的,仍有相同的,输出第一个出现的。

思路:首先用vector数组保存字符串的所有的字串,保存的字串是按先后顺序求出来的,当长度,出现次数相同时,在前面的一定是字串中先出现的,然后统计每个字串出现的次数,依次保存在book数组里面。最后求出满足条件的字串下标k,输出

代码:

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main(){
	int n,len;
	string str;
	cin>>n>>str;
	len = str.length();//len保存的是最长的子串
	vector<string> v;//v依次保存所有的可能的子串 
	for(int i=n;i<=len;i++){//把可能的子串 
		for(int j=0;j<=len-i;j++){
			string tem = str.substr(j,i);
			v.push_back(tem);
		}
	} 
	vector<int> book(v.size());//book保存字串出现的次数 
	for(int i=0;i<v.size();i++){//统计每个字串出现的次数 
		for(int j=0;j<v.size();j++){
			if(i!=j&&v[i]==v[j]){
				book[i]++;
			}
		}
	} 
	int max=0,k=0;//max保存的是出现次数最多的长度的字串,k是对应字串的下标 
	for(int i=0;i<book.size();i++){
		if(book[i]>max||(book[i]==book[k]&&v[i].length()>v[k].length())){
			max = book[i];
			k = i;
		}
	}
	cout<<v[k]; 
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值