马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
密码脱落
原题目链接
题目描述
X 星球的考古学家发现了一批古代留下来的密码。
这些密码是由 A、B、C、D 四莳植物的种子串成的序列。
细致分析发现࿰
c;这些密码串当初应该是前后对称的࿰
8;即镜像串࿰
9;。
由于年代久远࿰
c;其中许多种子脱落了࿰
c;因此有些串可能失去了镜像的特征。
你的任务是:
- 给定一个现在看到的密码串࿰
c;
- 计算出至少脱落多少个种子࿰
c;才能使得当初的串酿成现在的样子。
输入描述
- 输入一行࿰
c;表现现在看到的密码串࿰
8;字符串长度不凌驾 10
0
0
࿰
9;。
输出描述
- 输出一个正整数࿰
c;表现至少脱落了多少个种子。
输入输出样例
示例 1
输入
输出
示例 2
输入
输出
࿰
8;阐明:脱落越少࿰
c;保持镜像结构越好࿰
c;求最少脱落的数目。࿰
9;
c+
;+
;代码
- #include<bits/stdc+
- ;+
- ;.h>using namespace std;string a, b;int n;int main() { cin >> a; b = a, reverse(a.begin(), a.end()); n = a.size(); vector<int> last(n +
- ; 1), now(n +
- ; 1); for (int i = 1; i <= n; i+
- ;+
- ;) { for (int j = 1; j <= n; j+
- ;+
- ;) { now[j] = a[i - 1] == b[j - 1] ? last[j - 1] +
- ; 1 : max(last[j], now[j - 1]); } last = now; } cout << n - last[n]; return 0
- ;}//by wqs
复制代码 算法解析
其实就是最长公共子序列问题
求出s和它的反转sr的最长公共子序列࿰
c;它是一个回文串
必要添加的字符个数就是长度减去这个子序列的长度
用求最长公共子序列的常规方法-动态规划来解
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123
.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |