乙個字串的字首是指包含該字元第乙個字母的連續子串,例如:abcd的所有字首為a, ab, abc, abcd。給出乙個字串s,求其所有字首中,字元長度與出現次數的乘積的最大值。
例如:s = 「abababa」 所有的字首如下:
「a」, 長度與出現次數的乘積 1 * 4 = 4,
「ab」,長度與出現次數的乘積 2 * 3 = 6,
「aba」, 長度與出現次數的乘積 3 * 3 = 9,
「abab」, 長度與出現次數的乘積 4 * 2 = 8,
「ababa」, 長度與出現次數的乘積 5 * 2 = 10,
「ababab」, 長度與出現次數的乘積 6 * 1 = 6,
「abababa」, 長度與出現次數的乘積 7 * 1 = 7.
其中"ababa"出現了2次,二者的乘積為10,是所有字首中最大的。
正解思路:
通過求next陣列 和 遞迴next陣列的方法記錄字串出現的次數。
**:
#include
#include
#include
#include
#include
#define n 100005
using namespace std;
typedef
long
long ll;
int f[n]
,cnt[n]
;char str[n]
;int len;
void
getnext()
}int
main()
ll res=0;
for(ll i=
1;i<=len;i++
) cout<}
51Nod1277 字串中的最大值
乙個字串的字首是指包含該字元第乙個字母的連續子串,例如 abcd的所有字首為a,ab,abc,abcd。給出乙個字串s,求其所有字首中,字元長度與出現次數的乘積的最大值。例如 s abababa 所有的字首如下 a 長度與出現次數的乘積 1 4 4,ab 長度與出現次數的乘積 2 3 6,aba 長...
51nod 1277 字串中的最大值
a 長度與出現次數的乘積 1 4 4,ab 長度與出現次數的乘積 2 3 6,aba 長度與出現次數的乘積 3 3 9,abab 長度與出現次數的乘積 4 2 8,ababa 長度與出現次數的乘積 5 2 10,ababab 長度與出現次數的乘積 6 1 6,abababa 長度與出現次數的乘積 7...
51nod 1277 字串中的最大值
51nod 1277 字串中的最大值 對於單串,考慮多串的fail樹,發現next陣列的關係形成樹形結構 建出next樹,對於每乙個字首,他出現的次數就是他子樹的大小 include include includeinline int read const int maxn 100007 struc...