当前位置: 首页 > news >正文

曲师大2023大一新生排位赛-C.String题解

C.String

题目描述

众所周知,许师哥精通字符串。
一天,许师哥意外的获得了一个字符串,但他发现这个字符串并不是一个回文串,因此他非常生气。于是他决定从这个字符串中删除若干个字符使得 剩余的字符串为一个回文串
回想回文串的定义:如果一个字符串正着读和反着读都是一样的字符串,那么这个字符串就是回文串。

输入描述

第一行有一个正整数 n\left ( 1\leq n\leq 2000 \right ),表示字符串的长度。
第二行有一个长度为 n 仅含有小写字母的字符串 s。

输出描述

输出一个整数,表示使得剩余字符串为回文串最少删除的字符数量。

样例

输入:

6
aabcaa

输出:

1

输入:

10
asdbdbdadb

输出:

3

思路:

这个题算是一个板子题,最长公共子序列问题。闫氏dp分析方法可以分析如下:

 对于这个题,我要找的是回文字符串,转化为我找字符串的正序和逆序的最长公共子序列问题

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int f[2100][2100];
int main()
{int n;cin >> n;string s1,s2;cin >> s1;s2 = s1;reverse(s2.begin(),s2.end());s1 = " " + s1;s2 = " " + s2;for(int i = 1;i <= n;i++){for(int j = 1;j <= n;j++){if(s1[i] != s2[j]){f[i][j] = max(f[i - 1][j],f[i][j - 1]);}else{f[i][j] = f[i - 1][j - 1] + 1;}}}cout << n - f[n][n];
}

http://www.lryc.cn/news/95056.html

相关文章:

  • Linux Ubuntu安装RabbitMQ服务
  • 什么是测试用例?如何设计?
  • Maven —— 项目管理工具
  • Ubuntu 命令行编辑文件后如何保存退出
  • AHB协议理解
  • 【UE5 多人联机教程】01-创建主界面
  • HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 五)
  • React(3)
  • LangChain大型语言模型(LLM)应用开发(三):Chains
  • FPGA——点亮led灯
  • idea创建spark教程
  • 【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取
  • C#图片处理
  • php 开发微信 h5 支付 APIv3 接入超详细流程
  • HTML学习 第一部分(前端学习)
  • python 实现串口指令通讯
  • pytorch深度学习逻辑回归 logistic regression
  • 数据仓库建设-数仓分层
  • 共享与协作:时下最热门的企业共享网盘推荐!
  • mysql取24小时数据
  • TCP/IP网络编程 第十五章:套接字和标准I/O
  • SaleSmartly,客户满意度调查的绝对好助手
  • MySQL高阶语句
  • 手机快充协议
  • centos 7升级gcc到10.5.0
  • 从脚手架搭建到部署访问路程梳理
  • 数据库应用:MySQL数据库SQL高级语句与操作
  • xshell连接WSL2
  • Flask新手教程
  • 拼多多API接口,百亿补贴商品详情页面采集