天梯赛L2-008 最长对称子串 (字符串处理)
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"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 最长对称子串 (字符串处理)的更多相关文章
- 团体程序设计天梯赛-练习集L2-008. 最长对称子串
L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度. ...
- 天梯杯 L2-008. 最长对称子串
L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度. ...
- c语言:最长对称子串(3种解决方案)
问题描述: 输入一个字符串,输出该字符串中最大对称子串的长度.例如输入字符串:“avvbeeb”,该字符串中最长的子字符串是“beeb”,长度为4,因而输出为4. 解决方法:中序遍历 一,全遍历的方法 ...
- L2-008 最长对称子串 (25 分) (模拟)
链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805067704549376 题目: 对给定的字符串,本题要求你输出 ...
- L2-008. 最长对称子串(思维题)*
L2-008. 最长对称子串 参考博客 #include <iostream> using namespace std; int main() { string s; getline(ci ...
- pat 团体赛练习题集 L2-008. 最长对称子串
对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s&quo ...
- L2-008. 最长对称子串
L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度. ...
- L2-008 最长对称子串 (25 分)
对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11. 输入格式: 输入在一 ...
- PAT L2-008 最长对称子串(模拟字符串)
对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11. 输入格式: 输入在一 ...
随机推荐
- JavaScript数组去重的四种方法
今天,洗澡的想一个有趣的问题,使用js给数组去重,我想了四种方法,虽然今天的任务没有完成,5555: 不多说,po代码: //方法一:简单循环去重 Array.prototype.unique1 ...
- ci事务
CI框架百问百答:CodeIgniter的事务用法?--第9问 时间 2013-06-06 10:57:45 CSDN博客 原文 http://blog.csdn.net/haor2756/art ...
- 使用python操作Memcache、Redis、RabbitMQ、
Memcache 简述: Memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的.需要 ...
- Fiddler绕过前端直接和后台进行交互
测试需求:有一个功能,允许用钻石兑换金币,假设1钻石=1金币,前端控制一次至少兑换10个,最多100个,后台不做验证. 测试方案:输入10,也就是告诉前端我要兑换10个金币,等前端验证通过之后,截取要 ...
- XTU 1233 Coins(DP)
题意: n个硬币摆成一排,问有连续m个正面朝上的硬币的序列种数. 很明显的DP题.定义状态dp[i][1]表示前i个硬币满足条件的序列种数.dp[i][0]表示前i个硬币不满足条件的序列种数. 那么显 ...
- 《Linux内核设计与实现》第5章读书笔记
第五章 系统调用 一.系统调用概述 系统调用在Linux中称为syscall,返回的值是long型变量:如果出错,C库会将错误代码写入errno全局变量(通过调用perror()函数可以把该变量翻译成 ...
- Hive(三)hive的高级操作
一.hive的各种join操作 语法结构:join_table:table_reference JOIN table_factor [join_condition]| table_reference ...
- 解题:POI 2013 Taxis
题面 设当前位置为$pos$,那么可以发现在出租车总部左侧时,每辆车的贡献是$x[i]-(d-pos)$,而在右侧时只有$x[i]>=m-d$的车能够把人送到,那么首先我们要找出最小的满足$x[ ...
- UVA-11582 数学
UVA-11582 题意: 求f[a^b]%n ,其中f是斐波那契数列,1<=n<=1000,0<=a,b<=2^64; 代码: //这题重点是要发现 f[i]%n会出现循环, ...
- I/O多路复用一些概念
一.前言 在事件驱动模型中,我们说当程序遇到I/O操作时,注册 一个回调到事件循环中,主程序继续做其他事情.当I/O操作完成后,再切换回原来的任务.这就是说I/O操作是和程序本身没关系的,其实I/O操 ...