http://community.topcoder.com/stat?c=problem_statement&pm=12967

计算一个字符串里Palindrome的数量。我的DP方法需要n^2的空间。

#include <vector>
#include <string>
using namespace std; class PalindromicSubstringsDiv2 {
public:
int count(vector <string> S1, vector <string> S2) {
string s;
for (int i = 0; i < S1.size(); i++) {
s += S1[i];
}
for (int i = 0; i < S2.size(); i++) {
s += S2[i];
}
int ret = 0;
vector<vector<bool>> dp;
int N = s.size();
dp.resize(N);
for (int i = 0; i < N; i++) {
dp[i].resize(N + 1);
}
for (int len = 1; len <= N; len++) {
for (int i = 0; i + len <= N; i++) { // start pos
if (len == 1) {
dp[i][len] = true;
} else if (len == 2){
dp[i][len] = (s[i] == s[i + len - 1]);
} else {
dp[i][len] = dp[i + 1][len - 2] && (s[i] == s[i + len - 1]);
}
ret += (dp[i][len] ? 1 : 0);
}
}
return ret;
}
};

如果从中间开始往两边扩,就不需要额外空间了~

#include <vector>
#include <string>
using namespace std; class PalindromicSubstringsDiv2 {
public:
int count(vector <string> S1, vector <string> S2) {
string s;
for (int i = 0; i < S1.size(); i++) {
s += S1[i];
}
for (int i = 0; i < S2.size(); i++) {
s += S2[i];
}
int count = 0;
int N = s.size();
for (int m = 0; m < N; m++) {
for (int even = 0; even < 2; even++) {
int i, j = 0;
if (even == 0) {
i = j = m;
} else {
i = m;
j = m + 1;
}
for (; i >= 0 && j < N; i--,j++) {
if (s[i] == s[j])
count++;
else
break;
}
}
}
return count;
}
};

  

*[topcoder]PalindromicSubstringsDiv2的更多相关文章

  1. TopCoder kawigiEdit插件配置

    kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...

  2. 记第一次TopCoder, 练习SRM 583 div2 250

    今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...

  3. TopCoder比赛总结表

    TopCoder                        250                              500                                 ...

  4. Topcoder几例C++字符串应用

    本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...

  5. TopCoder

    在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...

  6. TopCoder SRM 596 DIV 1 250

    body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...

  7. 求拓扑排序的数量,例题 topcoder srm 654 div2 500

    周赛时遇到的一道比较有意思的题目: Problem Statement      There are N rooms in Maki's new house. The rooms are number ...

  8. TopCoder SRM 590

     第一次做TC,不太习惯,各种调试,只做了一题...... Problem Statement     Fox Ciel is going to play Gomoku with her friend ...

  9. Topcoder Arena插件配置和训练指南

    一. Arena插件配置 1. 下载Arena 指针:http://community.topcoder.com/tc?module=MyHome 左边Competitions->Algorit ...

随机推荐

  1. lower_bound和upper_bound

    lower_bound:返回大于或等于val的第一个元素位置 upper_bound:返回大于val的第一个元素位置 两个函数用的都是二分查找

  2. jquery如何通过name名称获取当前name的value值

    本文为大家介绍下jquery通过name名称获取当前name的value值的具体实现,感兴趣的朋友可以参考下. 复制代码代码如下: $("*[name='name']").val( ...

  3. php intval()函数

    格式:int intval(mixed $var [, int $base]); 1.intval()的返回值是整型,1或者0.可作用于数组或者对象(对象报错信息:Notice: Object of ...

  4. Translation001——android

    请尊重原创,转载请注明出处: Author:KillerLegend Link:http://www.cnblogs.com/killerlegend/ BEGIN****************** ...

  5. delphi的UTF8相关函数

    delphi的UTF8相关函数 AnsiToUtf8 function Converts a string encoded in Ansi to UTF-8. PUCS4Chars function ...

  6. 每日一“酷”之difflib

    介绍:difflib 比较序列.该模块包含一些用来计算和处理序列直接差异的工具.她对于比较文本尤其用,其中包含的函数可以使用多种常用差异格式生成报告. 测试数据(splitlines()按行划分为序列 ...

  7. 6、WPF中的特殊字符与空白

    特殊字符: 小于号 <  字符实体采用&lt表示 大于号 >  字符实体采用&gt表示 &符号      字符实体采用&amp表示 引号"&quo ...

  8. 编译时IOS Device 无法选择的情况

    问题描述:当你项目开发环境Xocode版本高于你本地Xocode 编译版本时,在本地运行会出现如下错误: 解决:  重写调整Deloyment Target 的版本 注:还有一种情况会出现如上错误,并 ...

  9. 使用OPTIMIZE TABLE命令来整理表碎片实践

    操作环境:ubuntu 14.10   mysql 5.6.25 对含有BLOB或TEXT字段的表,若经常做修改或删除类的操作,需要定期执行OPTIMIZE TABLE命令来整理碎片. 1.creat ...

  10. VBS基础篇 - wscript 对象

    一.wscript对象 描述:提供对 Windows 脚本宿主对象模型根对象的访问.详述:WScript 对象是 Windows 脚本宿主对象模型层次结构的根对象.它可在任何脚本文件中使用,不需要特定 ...