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(…

sun键盘没有stop键_请教Sun键盘

请教Sun键盘(2011-12-24 06:01:11)标签&#xff1a;计算机杂谈请教Sun键盘Sun键盘上,Help和F1之间的空白键是干啥的?Space旁边的两个菱形标志的呢?Compose呢?谢谢!请教Sun键盘Space旁边的两个菱形标志是一个类似Ctrl、Alt的修饰键&#xff0c;叫Meta。可以用Meta;键名来定义…

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…

linux 编译3g驱动_linux下使用3G拨号上网 以及3g驱动设置

中兴WCDMA模块 Linux拨号流程Version 1.0目录1. 测试准备……………………………………………………..…32. 拨号脚本………………………………………………………133. 拨号过程………………………………………………………161. 测试准备本文档测试模块&#xff1a;MF210(中兴W…

文件压缩(基于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;每个询问输入一对l, r。 对于每个询问&#xff0c;输出原序列中从第l个数到第r个数的和。 输入格式 第一行包含两个整数n和m。 第二行包含n个整数&#xff0c;表示整数数列。 接下来m行&#xff0c;…

子矩阵的和

题目描述 输入一个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。 请你将进行完所有操作后…

python常用的开发环境包括_Python语言主要包括哪些集成开发环境?_学小易找答案...

【填空题】Python的标准随机数生成器模块是【简答题】Why does critical thinking matter?【简答题】采集瓶子的外形进行创意设计 用点、线、面进行装饰填充 A4纸手绘,构图要有新意,要饱满【简答题】How can a lack of critical thinking cause a loss of personal freedom?【…

最长连续不重复子序列

题目描述 给定一个长度为n的整数序列&#xff0c;请找出最长的不包含重复数字的连续区间&#xff0c;输出它的长度。 输入格式 第一行包含整数n。 第二行包含n个整数&#xff08;均在0~100000范围内&#xff09;&#xff0c;表示整数序列。 输出格式 共一行&#xff0c;包…

ocp跟oce的区别 oracle_Oracle视频10g 11g认证视频教程 OCA/OCP 从入门到精通 数据库DBA...

一、认证Oracle OCP认证(Database 10g Administrator Certified Professional)为Oracle公司的数据库专家的认证。拥有OCP认证说明你拥有了大型Oracle数据库管理的技术能力&#xff0c;具备了成为大型企业核心数据库系统管理员的资格。OCE 1Z0-051&#xff1a;Oracle Database 1…