实验八 算法(学习通)编程题1. 最长回文子串

您所在的位置:网站首页 找到一个字符串的最长回文字符串 实验八 算法(学习通)编程题1. 最长回文子串

实验八 算法(学习通)编程题1. 最长回文子串

2024-06-25 13:24:21| 来源: 网络整理| 查看: 265

【问题描述】

    给定一个字符串,求该字符串中包含的最长回文子串。

    输出起始位置最小的位置编号(从0开始)以及回文子串的长度。 【输入形式】

    输入的第一行为一个整数T,表示有T组测试数据,接下来的T行,每行一个字符串,对应每组测试数据 【输出形式】

    输出有T行,每行两个整数,分别表示对应测试用例中包含的最长回文子串的起始位置(从0开始)和子串长度,如果有多个,则输出起始位置最小的。 【样例输入】

2 12abcbats qwerabccbaw

【样例输出】

2 5 4 6

【思路分析】

本题可用动态规划,但耗时会比较长。接下来我给大家介绍中心扩展方法,该方法我在练习七 字符串编程题12. E-mail地址一文中曾介绍过。

中心扩展的方法其实就是以字符串的某一子串为中心,向左右进行扩展。例如字符串s = "abacdca",假设以s[4]为中心,左右进行扩展的时候,如果s[4-1] == s[4+1],那么"cdc"为回文子串,如果我们再进一步扩展,s[4-2] == s[4+2],那么"acdca"为回文子串。一般的,我们令i为子串中心,记l为扩散子串所对应的最左下标,r为扩散子串所对应的最右下标,只需要保证边界条件:l0rs.length()s[l]==s[r],我们可以进行迭代(也就是l--;r++;)。

注意回文中心可能为一个字符,也可能为两个字符。

#include using namespace std; int main() { int t, l, r, resL, len; cin >> t; string s; while (t--) { len = 0; cin >> s; //回文中心为一个字符 for (int i = 0; i < s.length(); ++i) { l = r = i; while (l >= 0 && r < s.length() && s[l] == s[r]) { l--; r++; } if (r - l - 1 > len) { len = r - l - 1; resL = l + 1; } } //回文中心为两个字符 for (int i = 0; i < s.length() - 1; ++i) { l = i; r = l + 1; while (l >= 0 && r < s.length() && s[l] == s[r]) { l--; r++; } if (r - l - 1 > len) { len = r - l - 1; resL = l + 1; } } cout


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭