LeetCode之最大回文串--动态规划

1. 题目

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:输入: "babad"输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:输入: "cbbd"输出: "bb"

2. 解题方法:

(1) 暴力法

前提是没有要求内存或者时间,则书写起来是最快速的 。
新的函数

  1. std::reverse(tem.begin(),tem.end()); //反转 ,将字符串进行反转。

核心思想

  1. 两个for循环将所有的子串求出,之后reverse函数进行反转,观察子字符串和原字符串是不是相同。
  2. i 表示的是子字符串的头, j表示以i为头的所有的字符串。
  3. res存放长度最多的字符串。 temp是存放子字符串,tem是反转之后的temp。
class Solution {
public:string longestPalindrome(string s) {string res = "";   //存放最终结果string temp = "";  //存放临时子串for (int i = 0; i<s.length(); i++) {for (int j = i; j<s.length(); j++) {temp = temp + s[j];string tem = temp;std::reverse(tem.begin(),tem.end());//反转if(tem == temp) {res = temp.length()>res.length()?temp:res;}}temp = "";}return res;}
};

(2)动态规划

动态规划中,最重要的是分清楚分段函数。
dp[i][j] = 0 表示的是从i到j的子串是不是回文串; 用在增加长度时,判断条件用
新的函数
1. vector<vector> dp(len, vector(len)); 表示的是定义一个二维数组, vector中套着vector, 而且第一个len表示的是
第一层len个vector, 第二个是第二层有len个int。
2.s.substr(start, end); 表示的是获取string中start到end之间的字符串,返回的string
核心思想

  1. 最短的回文串进行一个一个增加。
  2. 当l=3,(因为l = 1和 l=2已经说明了)
  3. i充当子串的头,j充当子串的尾。 i = 0; j = i+l - 1;
  4. 当满足条件s[i] == s[j] && dp[i+1][j-1]==1就可以将dp[i][j]进行添加;
    dp[i+1][j-1]==1表示的是,比其短一节的字符串是不是回文!!!
class Solution {
public:string longestPalindrome(string s) {int len = s.length();if (len == 0 || len == 1) {return s;}int start = 0;int max = 1;vector<vector<int>> dp(len, vector<int>(len));  //第一步: 初始化dp[i][i] 和 l = 2 ;  因为长度为2的最长回文子串只能是aa或者bb重复的。   for(int i=0; i<len; i++) {dp[i][i] = 1;if(i<len-1 && s[i]==s[i+1]) {   //i后面必须还得有一个,所以是i<len-1dp[i][i+1] = 1;start = i;max = 2;}}for(int l=3; l<=len; l++) {           //l表示检索的子串长度,等于3表示先检索长度为3的子串.  长度应该取到len才可以for(int i=0; i+l-1<len; i++) {   //将从i=0开始检索所有s中的长度为3的子串。   int j=l+i-1;                 //终止字符位置。  当i++时, j也需要进行相应的偏移。j是根据l和i两个来变化的if(s[i] == s[j] && dp[i+1][j-1]==1) {  //状态转移dp[i][j] = 1;start = i;max = l;}}}return s.substr(start,max);//获取最长回文子串}
};

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

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

相关文章

sort函数_MATLAB--数字图像处理 sort()函数

sort()用处对一维或二维矩阵进行排序用法sort(A)&#xff1a;对一维或二维矩阵进行升序排序&#xff0c;并返回排序后的矩阵&#xff1b;当A为二维矩阵时&#xff0c;对矩阵的每一列分别进行升序排序(列优先)。sort(A,dim)&#xff1a;对矩阵按指定的方向进行升序排序&#xff…

LeetCode 1248. 统计「优美子数组」(要复习)

文章目录1. 题目2. 解题2.1 记录奇数出现的pos2.2 前缀和1. 题目 给你一个整数数组 nums 和一个整数 k。 如果某个 连续 子数组中恰好有 k 个奇数数字&#xff0c;我们就认为这个子数组是「优美子数组」。 请返回这个数组中「优美子数组」的数目。 示例 1&#xff1a; 输入…

LeetCode 560. 和为K的子数组(前缀和差分)

1. 题目 给定一个整数数组和一个整数 k&#xff0c;你需要找到该数组中和为 k 的连续的子数组的个数。 示例 1 : 输入:nums [1,1,1], k 2 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。 说明 : 数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] &#xff0c;且…

2月4日 星期三

昨天几点睡掉的? 估计猫是不会睡太早了 以后拍照不用担心猫牙了 想怎么笑就怎么笑 是不是 多给家里传传吧 估计很多人都想看到小猫呢 爸爸今天要回本溪了 下午2点车 我去送他 亲亲 转载于:https://www.cnblogs.com/loverain/archive/2009/02/04/1383549.html

LeetCode之最小路径和

1. 题目 给定一个包含非负整数的 m x n 网格&#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例: 输入: [[1,3,1],[1,5,1],[4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和…

python ppt自动生成_如何自动化生成PPT缩略图?

搜到的代码,可能得自己改一下. 导出当前文件夹下所有 PowerPoint 演示文稿的第一张幻灯片 并以图形文件格式保存在当前文件夹下 变量声明和初始化Dim wShell, pptApp, fso, folder, file, slide, outFileSet wShell WScript.CreateObject("WScript.Shell") 获取当前…

LeetCode 862. 和至少为 K 的最短子数组(前缀和+deque单调栈)

1. 题目 返回 A 的最短的非空连续子数组的长度&#xff0c;该子数组的和至少为 K 。 如果没有和至少为 K 的非空子数组&#xff0c;返回 -1 。 示例 1&#xff1a; 输入&#xff1a;A [1], K 1 输出&#xff1a;1示例 2&#xff1a; 输入&#xff1a;A [1,2], K 4 输出&…

LeetCode之简单回文数

1. 题目 判断一个整数是否是回文数。回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。示例 1: 输入: 121 输出: true示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是…

python爬取全国真实地址_Python3爬虫全国地址信息

PHP方式写的一团糟所以就用python3重写了一遍&#xff0c;所以因为第二次写了&#xff0c;思路也更清晰了些。提醒&#xff1a;可能会有502的错误&#xff0c;所以做了异常以及数据库事务处理&#xff0c;暂时没有想到更好的优化方法&#xff0c;所以就先这样吧。待更懂python再…

Workflow WF Reference Links for 2009-02-13

Workflow Reference Links: 1. XPDL - The Silent Workhorse of BPM 我想如果要大致了解一下BPM的主要协议和规范&#xff0c;以及它们的关系&#xff0c;这是一篇很好的文章。在文章的后半部分&#xff0c;作者为XPDL进行了沉冤昭雪的工作。 2. Workflow Scalability a…

LeetCode 383. 赎金信

1. 题目 给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串&#xff0c;判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。 如果可以构成&#xff0c;返回 true &#xff1b;否则返回 false。 (题目说明&#xff1a;为了不暴露赎金信字迹&a…

LeetCode之最大正方形

1. 题目 在一个由 0 和 1 组成的二维矩阵内&#xff0c;找到只包含 1 的最大正方形&#xff0c;并返回其面积。示例:输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0输出: 42. 代码 函数 vector<vector> dp(m1, vector(n1, 0)); 定义二维vector以及其初始化&#xff…

WINCE应用的UI实现方案

一、MFC的硬伤 在接手现在这个项目之前&#xff0c;我对WINDOWS平台上的UI开发还是个白痴&#xff0c;除了MFC&#xff0c;就只知道GDI了。而且居然大言不惭地说用MFC只能画画灰色的对话框和按钮。但不论如何&#xff0c;在嵌入式这种对成本极度敏感的项目上&#xff0c;我是不…

python创建socket对象_python---一个简单的socket

server端:1 创建socket对象。调用socket构造函数。如&#xff1a;socket socket.socket( family, type )#family参数代表地址家族&#xff0c;可为AF_INET或AF_UNIX。AF_INET家族包括Internet地址&#xff0c;AF_UNIX家族用于同一台机器上的进程间通信。#type参数代表套接字类…

LeetCode 387. 字符串中的第一个唯一字符

1. 题目 给定一个字符串&#xff0c;找到它的第一个不重复的字符&#xff0c;并返回它的索引。 如果不存在&#xff0c;则返回 -1。 案例: s "leetcode" 返回 0. s "loveleetcode", 返回 2. 注意事项&#xff1a;您可以假定该字符串只包含小写字母。来…

vs中html如何设计分页_如何在电路设计中使用负载线(Load Line)?

本知识简介将描述负载线(Load Line)如何影响电路设计以及如何通过从I-V曲线创建负载(load)来分析电路。 整流二极管&#xff0c;LED和晶体管的电路分析包含非线性组件(例如整流二极管&#xff0c;发光二极管(LED)或晶体管)的电路无法使用我们通常应用于仅由电阻&#xff0c;电感…

ha ha

1.上大学的时候去衡山玩,当时爬山爬了一半,累的正想歇会的时候看到路边有个买纪念品的欧巴桑,上去开口就问:老婆........ 2.偶有次开车&#xff0c;有个美女同事搭车&#xff0c;一坐我旁边&#xff0c;偶特紧张滴说&#xff1a;把安全套带上&#xff01;美女以后再不理偶了。。…

LeetCode 405. 数字转换为十六进制数

1. 题目 给定一个整数&#xff0c;编写一个算法将这个数转换为十六进制数。 对于负整数&#xff0c;我们通常使用 补码运算 方法。 注意: 十六进制中所有字母(a-f)都必须是小写。 十六进制字符串中不能包含多余的前导零。 如果要转化的数为0&#xff0c;那么以单个字符’0’来…

LeetCode之两数之和

1. 题目 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是&#xff0c;你不能重复利用这个数组中同样的元素。示例:给定 nums [2, 7, 11, 15],…

汉字转UNICODE?

Function Str_Gb2UniCode(text:String):String; var i,j,len: integer; cur: integer; t: String; ws: widestring; begin Result:; ws:text; len:length(ws); i:1; j:0; while i<len do begin cur:ord(ws[i]); FmtStr(t,%4.4X,[cur]);//BCD转换 Result…