输入一行文本,输出最长近似回文词连续子串。所谓近似回文词是指满足以下条件的字符串:

1. S以字母开头,字母结尾

2. a(S)和b(S)最多有2k个位置不同,其中a(S)是S删除所有非字母字符并且把所有字母转化成小写之后得到的串,b(S)是a(S)的逆序串。

比如当k=1时,Race cat是一个近似回文词,因为a(S)=racecat和b(S)=tacecar只有2个位置不同。

Input

输入包含不超过25组数据,每组数据包含两行。第一行是整数k(0<=k<=200),第二行为字符串S,包含至少一个字母但不超过1000个字符(换行符不算)。S只包含字符、空格和其他可打印字符(比如逗号,句号),并且不会以空白字符开头。

Output

对于每组测试数据,输出最长近似回文子串的长度和起始位置(S的第一个字符是位置1)。如果有多个最长近似回文子串解,起始位置应尽量小。

Sample Input

1
Wow, it is a Race cat!
0
abcdefg
0
Kitty: Madam, I'm adam.

Sample Output

Case 1: 8 3
Case 2: 1 1
Case 3: 15 8

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
#define INF 999999
using namespace std;int main()
{int n,i,j;char s[1005];char ss[1005];int p[1005];int cnt,maxn,start,cas;int kase=1;while(~scanf("%d",&n)){getchar();// fgets(s,sizeof(ss),stdin);
        gets(s);int len=strlen(s);cnt=0,maxn=0,start=0;for(int i=0;i<len;i++)//预处理
        {if(isalpha(s[i]))//记录原始位置
            {p[cnt]=i;ss[cnt++]=tolower(s[i]);}}for(i=0;i<cnt;i++){cas=0;for(j=0;j<=i&&i+j<cnt;j++){if(ss[i-j]!=ss[i+j])cas++;if(cas>n)break;}j--;if(p[i+j]-p[i-j]+1>maxn){maxn=p[i+j]-p[i-j]+1;start=p[i-j];}cas=0;for(j=0;j<=i&&i+j+1<cnt;j++){if(ss[i-j]!=ss[i+j+1])cas++;if(cas>n)break;}j--;if(j<=-1)continue;if(p[i+j+1]-p[i-j]+1>maxn){maxn=p[i+j+1]-p[i-j]+1;start=p[i-j];}}printf("Case %d: %d %d\n",kase++,maxn,start+1);}return 0;
}

View Code

转载于:https://www.cnblogs.com/Roni-i/p/7385507.html

CSU 1328 近似回文词【最长回文字符串(三种方法)】相关推荐

  1. Word文档怎么横向排版?这三种方法简单高效专业

    我们在利用Word文档处理日常工作时,为了文档的美观,我们会经常对Word文档进行各种形式的排版,比如对Word文档进行横向排版.如果有小伙伴不知道该如何进行横向排版,那么今天小编将要向大家分享三个横 ...

  2. python判断回文数字,Python判断回文数的三种方法实例

    需求: 从控制台输入一个五位数,如果是回文数就打印"是回文数",否则打印"不是回文数",例如:11111 12321 12221 "回文"是 ...

  3. 判断回文数的三种方法

    法一:主要用于判断数字回文,不能用于字符串回文. #include<stdio.h> void fun(long num) {long r=0,temp=num;//记录判断数值while ...

  4. 调节e18-d80nk的测量距离_线缆太长负载太远,负载端电压难测量?三种方法帮你搞定...

    关键词:电缆, 线缆阻抗, 负载电流, 开尔文检测 在产品设计,研发过程中,我们常会碰到稳压器与负载分离的情况.此时,如果电缆线太长,线缆阻抗无法忽略.负载电流太大,这些都会使得配电线上的压降增大,从 ...

  5. Android实现截屏和截长图功能的几种方法

    一般情况下各种型号的手机都会有自带的截屏功能,也会有诸如"开关机键+音量键"的截屏快捷键,只要手机是亮屏状态,都会将手机屏幕的可视区域(包含状态栏)全部截取下来. 如果开发中想要调 ...

  6. Win11 22H2怎么退回之前版本?Win11回滚Win10系统教程(三种方法)

    最近,新的Windows11 22H2正式版已经推送了,有不少更新到新系统的朋友出现了问题,想要退回之前的系统版本,本文就针对Win11 22H2怎么退回之前版本的问题,带来了三种Win11回滚Win ...

  7. JavaScript刷新当前页面的三种方法,载入新文档替换当前页面

    通过JavaScript刷新当前页面的三种方法代码就可以简单的实现,首先我们来看三种刷新当前页的方法: reload() 方法; replace() 方法; 页面自动刷新; 方法1:reload() ...

  8. CSU 1328: 近似回文词

    省赛的A题...现场都没什么人做... 其实就一暴力水题......坑死了... 1328: 近似回文词 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: ...

  9. jsp判断字符串相等_最长回文字符串三种解法

    先解释一下什么是回文字符串,比如说字符串"aba",无论是从先往后读取还是从后往前读取,结果都是一样的.当给定很长的字符串时,如何快速获取到最长的回文字符串,这也是大厂比较常见的算 ...

最新文章

  1. 2016全球教育机器人发展白皮书
  2. docker privileged 权限 参数
  3. 实现Windows Phone、Android和iOS平台的统一硬件访问
  4. ANNOTATION PROCESSING 101 by Hannes Dorfmann — 10 Jan 2015
  5. 机器学习笔试题精选(七)
  6. Mysql显示创建表的sql语句
  7. 软件设计师下午题java_2018上半年软件设计师下午真题(三)
  8. 最优化学习笔记(六)——牛顿法性质分析
  9. 服装零售行业洞察报告
  10. MixedRealityToolkit-Unity:MR应用必用神器
  11. SQLite 被曝存在漏洞,数千应用受影响
  12. 西湖论剑2020writeup
  13. appium driver参数及命令行参数
  14. DFRobot新品Fermion:MCP9808高精度数字温度传感器的简介和工作原理介绍
  15. python ftp下载文件
  16. 在集群是手动启动Ray
  17. XP SP3桌面IE图标不见了,如何找回?
  18. MeasureReady TM 155 开发人员问答,第 2 部分:触摸屏设计和用户测试
  19. Android 图片预览功能
  20. 【手势隔层透传】iOS viewA被viewB遮挡,如何让viewA依然响应添加的pan平移手势

热门文章

  1. Linux上常用命令整理(二)—— paste
  2. get方式乱码及MAC异常
  3. 什么时候z检验什么时候t检验?
  4. speech_to_text_demo powered by IBM!
  5. 怎么用latex写ppt呢?
  6. 啊,苏黎世联邦理工的拒信,最想去的学校啊
  7. 一本很好的书LearnOpenGL
  8. Sybase中字符串替换函数 STR REPLACE
  9. 第四章:滚动堆栈(1)
  10. 编写边界条件测试用例原则