[codility]PrefixMaxProduct
Codility Certificate题目。求product最大值,product为长度*出现次数,例子"abababa"如下:
"a", whose product equals 1 * 4 = 4,
"ab", whose product equals 2 * 3 = 6,
"aba", whose product equals 3 * 3 = 9,
"abab", whose product equals 4 * 2 = 8,
"ababa", whose product equals 5 * 2 = 10,
"ababab", whose product equals 6 * 1 = 6,
"abababa", whose product equals 7 * 1 = 7.
这道题要用到KMP算法,所以研究了半天。http://www.cnblogs.com/lautsie/p/3228877.html 根据我们从-1开始的next数组是[-1, 0, 0, 1, 2, 3, 4, 5],注意这里我们最后有个5,比普通的next数组多一个。所以这里的while条件改成了i < s.size()
比如这里的3表示,abababa和abababa有3个是重合的。这样我们可以从后往前计数,如果某个字符数到了,就把它的next[i]的count加上。以aba举例:
abababa和abababa 时,给第三个a加了1,
abababa和abababa时,给第二个a加了1,这时,这个a的count是3。
#include <vector>
int solution(string &s) {
// write your code in C++98
vector<int> next(s.size()+1, 0);
vector<int> counter(s.size()+1, 1);
// build next array
int i = 0;
int j = -1;
next[0] = -1;
while (i < s.size()) {
if (j == -1 || s[i] == s[j]) {
next[++i] = ++j;
}
else {
j = next[j];
}
}
int ans = 0;
for (int i = s.size(); i > 0; i--) {
ans = max(ans, i * counter[i]);
if (ans > 1000000000) return 1000000000;
if (next[i] >= 0)
counter[next[i]] += counter[i];
}
return ans;
}
[codility]PrefixMaxProduct的更多相关文章
- Codility NumberSolitaire Solution
1.题目: A game for one player is played on a board consisting of N consecutive squares, numbered from ...
- codility flags solution
How to solve this HARD issue 1. Problem: A non-empty zero-indexed array A consisting of N integers i ...
- GenomicRangeQuery /codility/ preFix sums
首先上题目: A DNA sequence can be represented as a string consisting of the letters A, C, G and T, which ...
- *[codility]Peaks
https://codility.com/demo/take-sample-test/peaks http://blog.csdn.net/caopengcs/article/details/1749 ...
- *[codility]Country network
https://codility.com/programmers/challenges/fluorum2014 http://www.51nod.com/onlineJudge/questionCod ...
- *[codility]AscendingPaths
https://codility.com/programmers/challenges/magnesium2014 图形上的DP,先按照路径长度排序,然后依次遍历,状态是使用到当前路径为止的情况:每个 ...
- *[codility]MaxDoubleSliceSum
https://codility.com/demo/take-sample-test/max_double_slice_sum 两个最大子段和相拼接,从前和从后都扫一遍.注意其中一段可以为0.还有最后 ...
- *[codility]Fish
https://codility.com/demo/take-sample-test/fish 一开始习惯性使用单调栈,后来发现一个普通栈就可以了. #include <stack> us ...
- *[codility]CartesianSequence
https://codility.com/programmers/challenges/upsilon2012 求笛卡尔树的高度,可以用单调栈来做. 维持一个单调递减的栈,每次进栈的时候记录下它之后有 ...
随机推荐
- 2013年全国各大著名的IT公司薪资待遇大揭密
以下为转载,特此说明!--西电好网 ============================================ 1: 本人西电通院2013届毕业硕士,根据今年找工作的情况以及身边同学的汇 ...
- 判断对象是不是Vector
判断对象是不是数组可以用 var arr:Array = []; trace(arr is Array);//true var vec:Vector.<String> = new Vect ...
- springmvc(五)----异常处理
总结
- (CodeForces 510C) Fox And Names 拓扑排序
题目链接:http://codeforces.com/problemset/problem/510/C Fox Ciel is going to publish a paper on FOCS (Fo ...
- HTML5入门篇
---- HTML5简介 HTML5 是用于取代1999年所制定的 HTML 4.01 和 XHTML 1.0 标准的 HTML 标准版本,现在仍处于发展阶段,但大部分浏览器已经支持某些 HTML5 ...
- 之前可运行mongodb,后来却不行了显示Unclean shutdown detected mongodb
解决办法有三个: 第一个:如果你之前可以运行,说明你已经有数据存放目录了,你可以把数据存放目录之前的数据清空再启动,在配置一下 第二个:使用mongod --repair --dbpath D:\Mo ...
- rhel_6.x 安装mysql
不知为何mysql的官网很难下载,本人网上找了好久,终于找到了个镜像: 特别感谢http://mirrors.sohu.com/mysql/MySQL-5.6/ ^_^ 首先下载mysql的下面 ...
- 九度OJ1184二叉树
题目描述: 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储).例如如下的先序遍历字符串:ABC##DE#G##F###其中“#”表示的是空格,空格字符代表空树 ...
- leetcode 解题 String to Integer (atoi)(C&python)
//此题是easy题,比较简单,主要困难在考虑全输入的各种情况://1.开始的时候有空格等空白字符//2.开头有加减号//3.溢出(第一次写就是没有考虑到这个情况) //C代码int myAtoi(c ...
- Python学习笔记—itertools模块
这篇是看wklken的<Python进阶-Itertools模块小结> 学习itertools模块的学习笔记 在看itertools中各函数的源代码时,刚开始还比较轻松,但后面看起来就比较 ...