給定一個只有小寫字母構成的非空字符串,可以從字符串中任選字符并任意規定順序,每個字符只能用一次。
最多可以構成多少個”goodmorning”子串(可以重疊)。
比如說:字符串aaavbbbddgggooooooddmmrrnnnnii,可以構成goodmorningoodmorning,共2個。
輸入 有多組測試數據,請處理到文件結束。
每組數據給定一個只有小寫字母構成的非空字符串str。后臺所有數據保證1 <= |str| <= 10^5。
輸出 每組數據輸出一個整數,表示最多可以構成的”goodmorning”子串。
樣例輸入 aaavbbbddgggooooooddmmrrnnnnii goodmorninn goodmorning 樣例輸出 2 0 1
#include<cstdio>#include<cstring>#include<cmath>#include<stack>#include<queue>#include<algorithm>using namespace std;#define INF 0x3f3f3f3f#define ll long longchar s[100005];int main(){ while (~scanf("%s",s)){ int len = strlen(s); int a[150]; memset(a,0,sizeof(a)); for (int i = 0 ; i < len; ++i){ if (s[i] == 'g') a[s[i]-'a']++; if (s[i] == 'o') a[s[i]-'a']++; if (s[i] == 'm') a[s[i]-'a']++; if (s[i] == 'd') a[s[i]-'a']++; if (s[i] == 'r') a[s[i]-'a']++; if (s[i] == 'n') a[s[i]-'a']++; if (s[i] == 'i') a[s[i]-'a']++; } if (a['g'-'a'] >= 3) a['g'-'a'] += 1; a['g'-'a']/=2; a['o'-'a']/=3; a['n'-'a']/=2; int min = 0x3f3f3f3f; if (min > a['g'-'a']) min = a['g'-'a']; if (min > a['o'-'a']) min = a['o'-'a']; if (min > a['d'-'a']) min = a['d'-'a']; if (min > a['m'-'a']) min = a['m'-'a']; if (min > a['r'-'a']) min = a['r'-'a']; if (min > a['n'-'a']) min = a['n'-'a']; if (min > a['i'-'a']) min = a['i'-'a']; 一道水題 code速度太慢 代碼而且麻煩 續更新聞熱點
疑難解答