国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

藍橋杯 算法訓練 字串統計 By Assassin 字符串操作+離散化

2019-11-06 06:19:27
字體:
來源:轉載
供稿:網友
問題描述  給定一個長度為n的字符串S,還有一個數字L,統計長度大于等于L的出現次數最多的子串(不同的出現可以相交),如果有多個,輸出最長的,如果仍然有多個,輸出第一次出現最早的。輸入格式  第一行一個數字L。  第二行是字符串S。  L大于0,且不超過S的長度。輸出格式  一行,題目要求的字符串。  輸入樣例1:  4  bbaabbaaaaa  輸出樣例1:  bbaa  輸入樣例2:  2  bbaabbaaaaa  輸出樣例2:  aa數據規模和約定  n<=60  S中所有字符都是小寫英文字母。提示  枚舉所有可能的子串,統計出現次數,找出符合條件的那個

其實這道題是一個簡單的字符串操作,只不過在處理這個問題的時候用到了一下小技巧,比如string字符串操作,map迭代器的使用,簡單的離散化思想,和自定義的sort函數,對于新手還是值得學習一下的

首先我們明確數據范圍就是n<=60,那么其實明顯用字符串暴力記錄就可以了,但是這里買你還有一定的規則,就是如果有多個,輸出最長的,如果仍然有多個,輸出第一次出現最早的

那么我是這么處理的,我們在記錄string串用map 《string , int》,因為N<=60那么出現的最多次數不過是L=1,n=60吧!那么出現的次數最多60次吧,那么我們在處理int記錄次數的時候,加上起點位置*一個大數 ,這個大數一定比60大,那么我們就可以記錄該串起點的位置了,而且每次取個數的時候只需要模一下那個大數就能得到次數! 然后用map迭代器找到出現最多的次數,用結構體記錄出現次數最多的串,然后我們用一個cmp自定義函數排序,具體函數如下:

int cmp(node a,node b){ if(a.s.size()>b.s.size()) return 1; //先比大小 else if(a.s.size()==b.s.size()){ //大小相同則比較 起點位置,即出現早晚,因為乘上一個大數,一定是越小越早出現! if(a.times<b.times) return 1; } return 0;}

下面是我的丑代碼,具體見注釋~

#include<bits/stdc++.h>using namespace std;map<string,int>mp; typedef struct node{ string s; int times;}node;node ans[100001];int cmp(node a,node b){ if(a.s.size()>b.s.size()) return 1; //先比大小 else if(a.s.size()==b.s.size()){ //大小相同則比較 起點位置,即出現早晚,因為乘上一個大數,一定是越小越早出現! if(a.times<b.times) return 1; } return 0;}int main(){ int l; string target,temp; cin>>l>>target; for(int i=0;i<=target.size()-l;i++){ for(int j=l;j<=target.size()-i;j++){ temp.assign(target,i,j); if(mp[temp]==0){ //如果第一次出現初始化一個×大數的基底 ,離散化 mp[temp]=100000*i+1; } else{ mp[temp]++; } } } int maxnumber=0; map<string,int>::iterator it; //map迭代器 for(it=mp.begin();it!=mp.end();it++){ //求出來出現最多的次數 maxnumber=max(maxnumber,(it->second)%100000); //記得取模 } int pos=0; for(it=mp.begin();it!=mp.end();it++){ //將出現的次數最多的串信息記錄下來 if(it->second%100000==maxnumber){ ans[pos].s.assign(it->first); ans[pos++].times=it->second; } } sort(ans,ans+pos,cmp); //排序 cout<<ans[0].s<<endl; return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿荣旗| 湖口县| 长汀县| 华安县| 周至县| 嘉鱼县| 射阳县| 敦煌市| 浦东新区| 乡城县| 冕宁县| 聂荣县| 泽库县| 德江县| 银川市| 波密县| 阳新县| 海林市| 贵德县| 北辰区| 涟源市| 栾城县| 临邑县| 二连浩特市| 齐齐哈尔市| 静海县| 青龙| 滁州市| 禹州市| 卢氏县| 北川| 宝鸡市| 胶南市| 鄂托克旗| 民县| 横山县| 锡林浩特市| 竹山县| 长泰县| 民权县| 高淳县|