咕咕東很聰明,但他最近不幸被來自宇宙的宇宙射線擊中,遭到了降智打擊,他的英語水平被歸 零了!這一切的始作俑者宇宙狗卻毫不知情! 此時咕咕東碰到了乙個好心人——tt,tt在吸貓之餘教咕咕東學英語。今天tt打算教咕咕東字母a 和字母b,tt給了咕咕東乙個只有大寫a、b組成的序列,讓咕咕東分辨這些字母。 但是咕咕東的其他學科水平都還在,敏銳的咕咕東想出乙個問題考考tt:咕咕東問tt這個字串 有多少個子串是delicious的。 tt雖然會做這個問題,但是他吸完貓發現輝夜大小姐更新了,不想回答這個問題,並拋給了你, 你能幫他解決這個問題嗎?
delicious定義:對於乙個字串,我們認為它是delicious的當且僅當它的每乙個字元都屬於乙個 大於1的回文子串中。
輸入描述
輸入第一行乙個正整數n,表示字串長度 接下來一行,乙個長度為n只由大寫字母a、b構成的字串。
輸出描述
輸出僅一行,表示符合題目要求的子串的個數。
樣例輸入
5aabbb
樣例輸出(學到了學到了)
emm這個題我在考試的時候確實沒有想起來做法,沒有辦法把時間複雜度降到o(n),用了最暴力的方法列舉每乙個子串判斷是否滿足題目要求,只過了三個點…課下想方法也只是將時間複雜度減少到n的平方,列舉每乙個子串,將不滿足條件的刪除。但仔細分析這道題目會發現,子串的構成元素最多只有兩個,那麼其實這個題相比與普通的回文子串是簡單許多的。
例如:aaaab,這個必然不滿足條件,並且ab、aab、aaab必然也不滿足條件,即當出現乙個與上乙個字元不同的字元時,在這個字串的子串中凡是以b為右端點的必然都不滿足題意,個數恰好為(r-l)個。因此我們並不需要列舉每乙個子串,只需要找到不滿足條件的區域最長的不滿足條件子串就可以計算出這一段不滿足條件的子串。
易錯點1、資料可能會爆int
2、對於ab、ba的情況在從前遍歷和從後遍歷時會減去兩遍,因此要補回來。
#include
using
namespace std;
long
long len,n;
string s;
intmain()
} len+
=record;
tmp=n-1;
for(
int i=n-
2;i>-1
;i--)}
cout
}
Week12實驗 C 咕咕東學英語 模擬
咕咕東很聰明,但他最近不幸被來自宇宙的宇宙射線擊中,遭到了降智打擊,他的英語水平被歸零了!這一切的始作俑者宇宙狗卻毫不知情!此時咕咕東碰到了乙個好心人 tt,tt在吸貓之餘教咕咕東學英語。今天tt打算教咕咕東字母a 和字母b,tt給了咕咕東乙個只有大寫a b組成的序列,讓咕咕東分辨這些字母。但是咕咕...
T4 咕咕東學英語(模擬題
題目解析 首先讓ans最大組合取ans n n 1 2.因為有這樣乙個字串,它的每乙個字元都屬於乙個長度大於1的回文子串中 所以回文子串組合,比如長度為5的字串 最多的子串組合,無非是 s1s2 s1s2s3 s1s2s3s4 s1s2s3s4s5 s2s3 s2s3s4 s2s3s4s5 s3s4...
M3 T4咕咕東學英語
delicious的定義 當且僅當它的每乙個字元都屬於乙個大於1的回文子串中。正向求出子字串符合delicious的不好求,我們思考一下,逆向的求出不符合delicious的子字串區間。如ab aab aaab aa b或者ba bba bbba bb a這樣的是不符合delicious的,其他的都...