LeetCode【5--最长的回文子串】 LeetCode【6--Z字形变换】

最长的回文子串

题目描述

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
在这里插入图片描述

解题思路

可以跟无重复的最长子串一样,用一个滑动窗口,只不过这个窗口的右边界往右,左边界每回要从右边界的下标往左。
还需要一个二维数组记录当前窗口中记录的字符串是不是回文串
再需要一个变量记录回文串的长度。比较出最大的回文串
例如:baccab

  1. 首先定义右边界right,左边界left = right;从右边界的下标开始,如何判断当前窗口是否是回文串?第一步:判断两端值是否相等str[i] == str[j] ,第二步:判断窗口去除两端外,里面的字符串是不是回文串:s[i+1][j-1],如果长度小于3 right-left<=2,并且两端相同,那么去除两端必定为回文串 。经过上述判断则可以说明当前区间就为回文串,所以标记i~j区间中array[i][j] = true; 并记录回文串并计算长度,如果该区间长度大于之前记录的回文串的长度再记录right-left>length。res = susbtr(left,right-left+1); 从左边界开始截取长度为right - left +1的长度。length = right-left;
  2. 对于baccab来说,首先 str[right] = b ,str[left] = str[right] = b,两端相同,又因为长度小于3,所以b是回文字符串,array[i][j] =true; 此时长度大于length记录
  3. 然后right来到a的位置,left也跟着来到a的位置,开始往左走,走到b,判断两端不相同,直接下一个循环
  4. right再来到c的位置,往后依次类推…

代码实现

class Solution {
public:string longestPalindrome(string s) {int n = s.size();//记录字符串是否为回文字符串vector<vector<bool>> array (n,vector<bool>(n));string res = "";//记录结果返回int length = 0; //记录长度,比较出最长的回文子串if(n == 0)return s;if(n == 1)return s;//如果是两个字符,则返回第一个字符res = s[0]; //外层循环右边界for(int right = 0;right<n;++right){//内层循环左边界for(int left = right;left>=0;--left){//判断是否为回文字串if(s[left] == s[right] //两头相等&& (right-left<=2 //长度小于等于3,并且两头相等比为回文串||  array[left+1][right-1]) //去掉两头,中间也是回文串才是回文串){//标记left~right该区间为回文串array[left][right] = true;if(right-left>length)  //如果回文串长度大于之前记录的长度,则记录该串{res = s.substr(left,right-left+1);length = right-left; //记录新长度}  }}}return res;}
};

Z字形变换

题目描述

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:
在这里插入图片描述
在这里插入图片描述

解题思路

在这里插入图片描述
一共四行numbers = 4
找规律,

  1. 第0行,0-6-12 , 间隔为6
  2. 第1行,1-5-7-11-13 间隔为4-2-4-2 奇数行
    step-2*1(行)-2*1(行)-step-2*1(行)-2*1(行)
  3. 第2行,2-4-8-10-14,间隔为2-4-2-4 偶数行
    step-2*2(行)-2*2(行)-step-2*2(行)-2*2(行)
  4. 第3行,3-9-15 ,间隔为6

第一行和和最后一行,为step = 2*numbers-2
中间是中间层的下标间距总是step-2*行数,2*行数交替

代码实现

class Solution {
public:string convert(string s, int numRows) {if(numRows == 1)  //如果只有一行数据直接返回return s;int step = numRows*2 - 2;string res = "";int index = 0; //记录每行元素的下标int add = 0; //中间行间隔for(int i = 0; i<numRows;++i){index = i; //标记行数add = 2*i ; //出去第0行和numRows-1行中间行的间隔while(index<s.size()) //元素下标大于总个数要换行{res+=s[index];add = step - add ; //变换间隔,index += (i == 0 || i == numRows-1) ? step : add; //每行每个元素的下标都在变}}return res;}
};

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

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

相关文章

androidstudio 日历视图怎么显示农历_中秋国庆旅游攻略怎么做?用这个便签软件很简单...

九月已经到来&#xff0c;中秋节和国庆节距离我们也不远了&#xff0c;今年的中秋和国庆节重叠了有足足八天的假期。不少人都想趁着这个小长假出门旅游&#xff0c;要想保证旅游质量&#xff0c;那么就要做好攻略。中秋国庆旅游攻略怎么做&#xff1f;要想做好一份中秋国庆旅游…

c++ select函数_PySpark 操作函数一览

PySpark 操作函数一览Created: Sep 14, 2020 10:28 AM Tags: Big Data, PySpark, Python, SparkPyspark.sql.functionsfrom pyspark.sql import functions as F函数使用说明基本数学函数类abssin、cos、tan、asin、acos 、atan、sinh、cosh、tanhceil、round、floorexp、log、l…

LeetCode【7--整数反转】 LeetCode【8--字符串转整数】

整数反转 题目描述 给出一个 32 位的有符号整数&#xff0c;你需要将这个整数中每位上的数字进行反转。 解题思路 x%10 取一位&#xff0c;x/10下一位&#xff0c;注意越界&#xff0c; 代码实现 class Solution { public:int reverse(int x) {int sum 0;while(x){if(s…

word2003如何设置护眼模式_ERP系统上线,如何设置采购收货的模式,提升企业的采购效率...

如何合理的规划采购计划上次去拜访一个朋友&#xff0c;他们说公司既然出现没有下达采购订单&#xff0c;供应商也有送货过来的事情&#xff0c;对于公司来说&#xff0c;这个是非常严重的问题。若用了ERP系统之后&#xff0c;如何避免类似的事情发生&#xff0c;今天我们来分享…

LeetCode【9-- 回文数】LeetCode【10 --正则表达式的匹配】

回文数 题目描述 判断一个整数是否是回文数。回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 解题思路 判断该数的逆序数是不是和原数相同 代码实现 class Solution { public:bool isPalindrome(int x) {if(…

LeetCode【11--盛水最多的容器】LeetCode【12 -- 整数转罗马数字】

盛水最多的容器 题目描述 给定 n 个非负整数 a1&#xff0c;a2&#xff0c;…&#xff0c;an&#xff0c;每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线&#xff0c;使得它们与 x 轴共…

LeetCode【13--罗马数字转整数】LeetCode【14--最长的公共前缀】

罗马数字转整数 题目描述 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 例如&#xff0c; 罗马数字 2 写做 II &#xff0c;即为两个并列的 1。12 写做 XII &#xff0c;即为 X II 。 27 写做 XXVII, 即为 XX…

文件压缩(基于LZ77的压缩)

LZ77压缩原理 初始LZ77 LZ77是基于字节的通用压缩算法&#xff0c;它的原理就是将源文件中的重复字节(即在前文中出现的重复字节)使用(offset&#xff0c;length&#xff0c;nextchar)的三元组进行替换 这里的 长度–offset&#xff0c;距离—length&#xff0c;先行缓冲匹配…

好中的图像处理方面的期刊_约会中,注意这四个方面,帮助你把握好自己的真爱...

两个人想要拥有一段美好的感情&#xff0c;那么男生就要掌握好一些技巧去追求对方&#xff0c;在追求的过程中&#xff0c;两个人的约会也非常重要&#xff0c;毕竟只有约会过程中&#xff0c;女孩子才能够看到你光鲜亮丽的一面&#xff0c;才能够慢慢的接受你&#xff0c;如果…

kafka consumer配置拉取速度慢_Kafka消费者的使用和原理

这周我们学习下消费者&#xff0c;仍然还是先从一个消费者的Hello World学起&#xff1a;public class Consumer { public static void main(String[] args) { // 1. 配置参数 Properties properties new Properties(); properties.put("key.des…

子矩阵的和

题目描述 输入一个n行m列的整数矩阵&#xff0c;再输入q个询问&#xff0c;每个询问包含四个整数x1, y1, x2, y2&#xff0c;表示一个子矩阵的左上角坐标和右下角坐标。 对于每个询问输出子矩阵中所有数的和。 输入格式 第一行包含三个整数n&#xff0c;m&#xff0c;q。 …

jmeter 循环取值赋值给form_JMeter系列(三)逻辑控制器详解

循环控制器&#xff1a;指定迭代次数&#xff0c;可以用具体数字&#xff0c;也可以通过变量控制永远&#xff1a;表示无限循环点击查看示例&#xff1a;Jmeter实例(四)_图片爬虫简单控制器&#xff1a;这是最基础的一个控制器&#xff0c;它可以让脚本分层&#xff0c;变成一个…

c 复杂的前置后置面试题_OPPO Reno拆解:优秀工艺由外而内,复杂用料不负旗舰之名...

OPPO的新系列Reno手机最近吸引了不少注意力&#xff0c;不管是消费者还是手机极客都对其优秀的性能和强大的配置抱有极大的兴趣。最近&#xff0c;知名数码博主爱玩客对Reno十倍变焦版进行了拆解&#xff0c;从内部结构向我们揭示了这部手机的强大之处。并且点评道&#xff1a;…

差分矩阵

题目描述 输入一个n行m列的整数矩阵&#xff0c;再输入q个操作&#xff0c;每个操作包含五个整数x1, y1, x2, y2, c&#xff0c;其中(x1, y1)和(x2, y2)表示一个子矩阵的左上角坐标和右下角坐标。 每个操作都要将选中的子矩阵中的每个元素的值加上c。 请你将进行完所有操作后…

框架controller找不到_SpingBoot框架知识详解

Spring boot框架1、什么是Spring Boot&#xff1f;​ Spring Boot是Spring开源组织下的子项目&#xff0c;是Spring组件一站式解决方案&#xff0c;主要是简化了使用Spring的难度&#xff0c;简省了繁重的配置&#xff0c;提供了各种启动器&#xff0c;开发者能快速上手。Sprin…

架构的演变

基本概念 在介绍架构之前&#xff0c;为了避免部分读者对架构设计中的一些概念不了解&#xff0c;下面对几个最基础的概念进行介绍。 1.什么是分布式&#xff1f; 系统中的多个模块在不同服务器上部署&#xff0c;即可称为分布式系统&#xff0c;如Tomcat和数据库分别部署在…

axure8.0导出页面打不开问题_excel怎么转pdf?excel打不开?转换成PDF就行了

excel转pdf怎么做&#xff1f;年底最后一天了&#xff0c;我都被一堆的Excel文件搞得头疼&#xff0c;在这些时间里&#xff0c;要让我对几个G的文件进行操作&#xff0c;我已经是忙得不可开交&#xff0c;而在最后的最后&#xff0c;我的主管还说他的电脑无法打开我的Excel 了…

python怎么爬虫理数据_Python神技能 | 使用爬虫获取汽车之家全车型数据

最近想在工作相关的项目上做技术改进&#xff0c;需要全而准的车型数据&#xff0c;寻寻觅觅而不得&#xff0c;所以就只能自己动手丰衣足食&#xff0c;到网上获&#xff08;窃&#xff09;得&#xff08;取&#xff09;数据了。汽车之家是大家公认的数据做的比较好的汽车网站…

linux运算_CentOS「linux」学习笔记22:算术运算符、逻辑运算符、关系运算符

​linux基础操作&#xff1a;主要介绍啦算术运算符、逻辑运算符、关系运算符1.算术运算符[主要用来计算数值]注意使用expr运算时运算符和数值之间需要有空格&#xff0c;其他方式运算时不能有空格。常用算术运算符号&#xff1a;表示相加&#xff0c;&#xff0d;表示相减&…

python实现小型搜索引擎设计_基于JAVA的中小型饭店餐饮管理系统的设计与实现...

好程序设计擅长JAVA(SSM,SSH,SPRINGBOOT)、PYTHON(DJANGO/FLASK)、THINKPHP、C#、安卓、微信小程序、MYSQL、SQLSERVER等&#xff0c;欢迎咨询今天将为大家分析一个中小型饭店餐饮管理系统(俗话说“民以食为天”,中国的饮食文化有着久远的历史。“吃”不仅仅指的是填饱肚子,它早…