从零开始的CPP(23)动态规划解决最长回文串

 leetcode5

给你一个字符串 s,找到 s 中最长的 

回文串

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

最开始我是将回文串都存入map。使用substr进行切割,i为起始,j-i+1是步长

string longestPalindrome(string s) {if (s.length() <= 1) {return s;}map<int,string> resultmap;string temp;for (int i = 0; i < s.length() - 1; i++) {for (int j = i; j < s.length(); j++) {               //cout << "temp:" << temp << endl;string s1 = s.substr(i, j-i+1);temp = s1;reverse(temp.begin(), temp.end());//cout << "s1:" << s1 << endl;if (temp == s1) {resultmap[i] = s1;//cout << "s1:" << s1 << endl;}}}int length = 0;int index = 0;for (int i = 0; i < resultmap.size(); i++) {if (resultmap[i].length() > length) {length = resultmap[i].length();index = i;}}return resultmap[index];
}

优化了一下,还是时间复杂度高

string longestPalindrome(string s) {if (s.length() <= 1) {return s;}//map<int,string> resultmap;string temp;int max = 0;string maxstr;for (int i = 0; i < s.length() - 1; i++) {for (int j = i; j < s.length(); j++) {                             string s1 = s.substr(i, j - i + 1);temp = s1;if (s1.length() > max){reverse(temp.begin(), temp.end());//cout << "s1:" << s1 << endl;//cout << "temp:" << temp << endl;if (temp == s1) {maxstr = s1;max = s1.length();//cout << "s1:" << s1 << endl;}}               }}return maxstr;
}

最终还是用动态规划的方式解决。动态规划的核心思想把已经发生过的情况储存起来,需要时直接调用,也就是空间换时间。

dp存储了某一段字符串是否是回文串,dp[i][j]的值如果为true,表示字符串s中从下标i到下标j的子串是一个回文串;如果为false,则不是回文串。

动态规划需要递推,所以也需要初始化,这里需要初始化单个字符串与连续字符串的情况,之后递推。

string longestPalindrome(string s) {int n = s.length();if (n <= 1) {return s;}vector <vector<bool>> dp(n, vector<bool>(n, false));for (int i = 0; i < s.length(); i++) {dp[i][i] = true;}for (int i = 0; i < s.length()-1; i++) {if (s[i]==s[i+1]){dp[i][i+1] = true;dp[i+1][i] = true;}}int index=0;int maxlen=0;for (int len = 1; len < s.length(); len++) {for (int j = 0; j + len < s.length(); j++) {//cout << s[j] << endl << s[j + len]<<endl;if (s[j] == s[j + len] && dp[j + 1][j + len - 1]==true) {dp[j][j + len] = true;dp[j+len][j] = true;index = j;maxlen = len;cout << "找到回文" << ":";cout << index << "," << maxlen;}}}string res = s.substr(index, maxlen+1);return res;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/875050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css快捷代码【超出一行文本显示省略号/超出三行显示省略号/超出n行...】

常见的css小tips&#xff1a;显示省略号&#xff0c;文本超出容器显示省略号…没啥好说的&#xff0c;直接拷贝代码吧 .containers {overflow:hidden;text-overflow:ellipsis;text-align:justify;word-break:break-all;display:-webkit-box;-webkit-box-orient:vertical;-webk…

MS17-010漏洞复现+利用

1、 漏洞简述 漏洞名称&#xff1a;“永恒之蓝”漏洞 漏洞编号&#xff1a;MS17-010&#xff0c;CVE-2017-0143/0144/0145/0146/0147/0148 漏洞类型&#xff1a;缓冲区溢出漏洞 漏洞影响&#xff1a;信息泄露 CVSS评分&#xff1a;9.3&#xff08;High&#xff09; 利用难…

食家巷擀面皮:一口惊艳的传统美味

在美食的世界里&#xff0c;总有一些经典让人难以忘怀&#xff0c;食家巷擀面皮便是其中之一。食家巷擀面皮&#xff0c;那一张张薄而有劲道的面皮&#xff0c;宛如艺术品般细腻。它的外观晶莹剔透&#xff0c;散发着诱人的光泽&#xff0c;让人看一眼就忍不住想要品尝。制作擀…

Vue使用FullCalendar实现日历/周历/月历

Vue使用FullCalendar实现日历/周历/月历 需求背景&#xff1a;项目上遇到新需求&#xff0c;要求实现工单以日/周/月历形式展示。而且要求不同工单根据状态显示不同颜色&#xff0c;一个工单内部&#xff0c;需要以不同颜色显示三个阶段。 效果图 日历 周历 月历 安装插件…

MySQL学习——影响选项文件处理的命令行选项

大多数支持选项文件的MySQL程序都处理以下选项。因为这些选项会影响选项文件处理&#xff0c;所以必须在命令行上给出&#xff0c;而不是在选项文件中给出。为了正常工作&#xff0c;这些选项中的每一个都必须在其他选项之前给出&#xff0c;但以下情况除外&#xff1a; 打印默…

力扣第二十五题——K个一组反转链表

内容介绍 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内…

自定义IPython启动:打造个性化的交互式编程环境

自定义IPython启动&#xff1a;打造个性化的交互式编程环境 IPython&#xff0c;一个强大的交互式Python解释器&#xff0c;提供了丰富的定制选项&#xff0c;允许用户根据个人或团队的需求定制其行为和外观。设置自定义的启动命令是IPython定制功能的一部分&#xff0c;它可以…

1万6千多传统文化之古代地名大全ACCESS\EXCEL数据库

继续采集传统文化数据&#xff0c;之前采集过《传统文化之非物质文化大全ACCESS数据库》、《名人大全古今人物ACCESS数据库》、《传统文化之民俗文化大全ACCESS数据库》&#xff0c;今天的是古代地名查询&#xff1a; 截图下方有显示“共有记录数”&#xff0c;截图包含了表的所…

探索WebKit的CSS盒模型:深入理解Web布局的基石

探索WebKit的CSS盒模型&#xff1a;深入理解Web布局的基石 在Web开发的世界中&#xff0c;CSS盒模型&#xff08;Box Model&#xff09;是构建网页布局的核心原理。WebKit&#xff0c;作为Safari浏览器的渲染引擎&#xff0c;对CSS盒模型有着深入而精确的支持。本文将带你深入…

AtCoder Beginner Contest 363

A - Piling Up 题意 不同的分数段有不同的^数量&#xff0c;Takahashi想要使得他的^数量增加&#xff0c;问他所需要的最少分数增幅。 思路 我们只需要找到下一阶段的下限。 a / 100 是本阶段 1 变成下一阶段&#xff0c;再 * 100变成下限&#xff0c;再与原来的相减即可…

IP协议和路由转发

文章目录 IP协议IP报头网段划分特殊的IP私有IP和公有IP IP分片 路由 IP协议 IP协议提供了一种能力&#xff0c;将数据报从A主机送到B主机&#xff0c;TCP可以保证可靠性&#xff0c;所以TCP/IP协议可以将数据可靠的从A主机送到B主机。 IP报头 4位版本号(version): 指定IP协议…

Unity Shader - 2024 工具篇

目录 IDE 工具建议 IDE工具 Sublime 3 大势所趋&#xff0c;但是Sublime 使用插件还是相当的不习惯 代码跳转 Go to definite IDE 工具建议 () what is the best ide for coding shaderlab - #4 by DaveAstator - Unity Engine - Unity Discussions​​​​​​​I IDE工…

java中介模式

中介者&#xff08;Mediator&#xff09;模式是一种行为设计模式&#xff0c;它定义了一个对象来封装一组对象之间的交互。中介者对象负责控制和协调这些对象之间的交互&#xff0c;使得这些对象不需要显式地相互引用&#xff0c;从而降低它们之间的耦合。 以下是一个简单的中…

修复SteamUI.dll加载失败的指南,快速修复failed to load steamui.dll

在使用Steam平台进行游戏下载、安装和运行时&#xff0c;可能会遇到一些系统错误&#xff0c;比如“failed to load steamui.dll”。这个错误通常意味着Steam的用户界面库文件steamui.dll出现了问题。本文将详细介绍steamui.dll文件的相关信息以及如何修复这一问题。 一.什么是…

android audio 相机按键音:(二)加载与修改

相机按键音资源&#xff0c;加载文件路径&#xff1a; frameworks/av/services/camera/libcameraservice/CameraService.cpp 按键音&#xff0c;加载函数&#xff1a; void CameraService::loadSoundLocked(sound_kind kind) { ATRACE_CALL(); LOG1("Cam…

MySQL数据库基本安装与部署

目录 概念 数据库的基本概念 关系型数据库 非关系型数据库 MySQL 商业版与社区版 示例 初始化MySQL 添加系统服务 概念 数据库的基本概念 数据&#xff08;Data&#xff09; 描述事物的符号记录包括数字、文字、图形、图像、声音、档案记录等以“记录”形式按统一的…

邮件安全篇:如何防止邮件泄密?

本文主要讨论组织内部用户违反保密规定通过邮件泄密的场景。其他场景导致邮箱泄密的问题&#xff08;如账号被盗、邮件系统存在安全漏洞等&#xff09;不在本文的讨论范围。本文主要从邮件系架构设计、邮件数据防泄漏系统、建立健全规章制度、安全意识培训等方面分别探讨。 1. …

Java响应式编程库Reactor的介绍和基本使用

关于响应式编程的概念和介绍可以参考: 响应式编程(Reactive Programming)是什么? Java语言中,RxJava和Reactor是实现响应式编程的两个最流行的库,因为 Spring 5 及更高版本中,Reactor 是 Spring WebFlux 的底层实现框架,用于构建响应式 Web 应用,所以相比而言,Reactor…

充电桩浪涌保护方案—保障充电设施安全稳定运行的关键

在当今新能源汽车蓬勃发展的时代&#xff0c;充电桩作为电动汽车的“加油站”&#xff0c;其重要性不言而喻。然而&#xff0c;由于其复杂的电气环境和暴露于户外的特点&#xff0c;充电桩容易受到浪涌的影响。浪涌可能来自雷电、电网故障、大功率设备的启停等&#xff0c;对充…

JS+H5可视化广度优先算法

源码在效果图后面 可标记 障碍 起始点 终点 点击寻路按钮后&#xff0c;表格上会自动出现一条蓝色最佳路径&#xff08;加了一格一格显示的动画&#xff09; 以下是效果图 橙色起点 绿色终点 红色障碍物 以下是寻路结果 源代码 <!DOCTYPE html> <html lang&quo…