对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11。

输入格式:

输入在一行中给出长度不超过1000的非空字符串。

输出格式:

在一行中输出最长对称子串的长度。

输入样例:

Is PAT&TAP symmetric?

输出样例:

11

分析:

刚开始的时候觉得就是暴力循环下去,取最大值,然而 不用想肯定超了,然后就有一种比较巧妙的方法。

这个子串是对称的应该有两种对称的方式,一种是关于中间的那个字符对称,一种就是关于中间的两个相同的字符对称。

关于中间一个字符对称

例如abcdedcba,这个字符串是关于中间字符e对称的,我们只需要在找到中间字符e的时候,分别将左面的第i个于右面的第i个进行比较相等即可。d——d,c——c,b——b,a——a

关于中间两个字符对称

例如abcdeedcba,这个字符串是关于中间的两个字符ee对称的,我们在找到e的时候不能够简单的像上面一样向左向右比较,我们应该先确定e与他后面的另一个字符e是一样的,然后再分别向左向右比较。首先比较e——e,然后d——d,c——c,b——b,a——a

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<algorithm>
#include<math.h>
#include<map>
#include<vector>
using namespace std;
int main()
{
char a[1009];
gets(a);//所需要读入的字符串中可能有空格,则一定要用get()读进去
int k=strlen(a);
int num=0;
int max=0;
for(int i=0;i<k;i++)
{
/*
对称的串有两种形式,
一:这个串的长度为奇数个,即他有一个对称的字符
二:这个串的长度有偶数个,他是关于中间的两个相等的字符对称的
*/
//如果对称的串长度为奇数,我们就可以直接把中间的这个字符取出来,向左向右分别比较
num=1;
for(int j=1;j<k;j++)//依次为左右的第i个字符
{
if(i-j<0||i+j>=k||a[i-j]!=a[i+j])
break;
num+=2;
}
if(num>max)
max=num;
//如果对称串的长度为偶数个,我们不能把当前的字符直接取出来,要比较他和他的后一个相等,然后再向左向右依次比较
num=0;
for(int j=1;j<k;j++)
{
if(i-j+1<0||i+j>=k||a[i-j+1]!=a[i+j])
break;
num+=2;
}
if(num>max)
max=num;
}
printf("%d\n",max);
return 0;
}

天梯赛L2-008 最长对称子串 (字符串处理)的更多相关文章

  1. 团体程序设计天梯赛-练习集L2-008. 最长对称子串

    L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度. ...

  2. 天梯杯 L2-008. 最长对称子串

    L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度. ...

  3. c语言:最长对称子串(3种解决方案)

    问题描述: 输入一个字符串,输出该字符串中最大对称子串的长度.例如输入字符串:“avvbeeb”,该字符串中最长的子字符串是“beeb”,长度为4,因而输出为4. 解决方法:中序遍历 一,全遍历的方法 ...

  4. L2-008 最长对称子串 (25 分) (模拟)

    链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805067704549376 题目: 对给定的字符串,本题要求你输出 ...

  5. L2-008. 最长对称子串(思维题)*

    L2-008. 最长对称子串 参考博客 #include <iostream> using namespace std; int main() { string s; getline(ci ...

  6. pat 团体赛练习题集 L2-008. 最长对称子串

    对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s&quo ...

  7. L2-008. 最长对称子串

    L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度. ...

  8. L2-008 最长对称子串 (25 分)

    对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11. 输入格式: 输入在一 ...

  9. PAT L2-008 最长对称子串(模拟字符串)

    对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11. 输入格式: 输入在一 ...

随机推荐

  1. [ Selenium2 从零开始 by Bruce from http://seleniumcn.cn ] 1-8 视频集锦

    内容转自: http://blog.csdn.net/sxl0727tu/article/details/51887093\ ************************************* ...

  2. crontab & php实现多进程思路

    <?php $startTime = time(); while(1) { if (time() - $startTime > 600) { exit; } // ... Do SomeT ...

  3. Java 面试前的基础准备 - 01

    使用这个在线网页编辑真的是不习惯,还是 windows live writer 好. 下面列一个清单用于最近的面试:( 清单是网上down的 ) static,final,transient 等关键字 ...

  4. Codeforces 618D Hamiltonian Spanning Tree(树的最小路径覆盖)

    题意:给出一张完全图,所有的边的边权都是 y,现在给出图的一个生成树,将生成树上的边的边权改为 x,求一条距离最短的哈密顿路径. 先考虑x>=y的情况,那么应该尽量不走生成树上的边,如果生成树上 ...

  5. bzoj2253纸箱堆叠(动态规划+cdq分治套树状数组)

    Description P 工厂是一个生产纸箱的工厂.纸箱生产线在人工输入三个参数 n p a , 之后,即可自动化生产三边边长为 (a mod P,a^2 mod p,a^3 mod P) (a^4 ...

  6. [您有新的未分配科技点]博弈论入门:被博弈论支配的恐惧(Nim游戏,SG函数)

    今天初步学习了一下博弈论……感觉真的是好精妙啊……希望这篇博客可以帮助到和我一样刚学习博弈论的同学们. 博弈论,又被称为对策论,被用于考虑游戏中个体的预测行为和实际行为,并研究他们的应用策略.(其实这 ...

  7. 浴谷八连测R6题解(收获颇丰.jpg)

    这场的题都让我收获颇丰啊QWQ 感谢van♂老师 T1 喵喵喵!当时以为经典题只能那么做, 思维定势了... 因为DP本质是通过一些条件和答案互相递推的一个过程, 实际上就是把条件和答案分配在DP的状 ...

  8. angular 的 @Input、@Output 的一个用法

    angular 使用 @input.@Output 来进行父子组件之间数据的传递. 如下: 父元素: <child-root parent_value="this is parent ...

  9. mysql 中delete和trncate区别

    mysql中删除表记录delete from和truncate table的用法区别: MySQL中有两种删除表中记录的方法:(1)delete from语句,(2)truncate table语句. ...

  10. OpenCV---图像直方图

    一:直方图的直接使用 from matplotlib import pyplot as plt def plot_demo(image): print(image.ravel()) plt.hist( ...