回文子串[输出所有回文子串]

回文子串
    总时间限制:1000ms  内存限制:65536kB
描述
    给定一个字符串,输出所有长度至少为2的回文子串。
    回文子串即从左往右输出和从右往左输出结果是一样的字符串,
    比如:abba,cccdeedccc都是回文字符串。
输入
    一个字符串,由字母或数字组成。长度500以内。
输出
    输出所有的回文子串,每个子串一行。
    子串长度小的优先输出,若长度相等,则出现位置靠左的优先输出。
样例输入
    123321125775165561
样例输出
    33
    11
    77
    55
    2332
    2112
    5775
    6556
    123321
    165561

分析:

该题目输出格式要求比较特别:子串长度小的优先输出,若长度相等,则出现位置靠左的优先输出。

所以,这里分如下几个步骤来完成任务:

1、枚举子串的所有可能的长度 for(len=2;len<=n;len++)

2、当长度确定为len时,枚举所有长度为len的子串的开始点。

maxBegin=n-len;
        for(begin=0;begin<=maxBegin;begin++)

3、当开始点和长度明确时,可以遍历该子串并判断其是否回文串。

j=begin+len-1;
            for(i=begin;i<j;i++,j--)

详细代码如下:

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main(int argc, char *argv[])
 4 {
 5     char a[505];
 6     int n,len,begin,maxBegin,i,j;
 7     freopen("29.in","r",stdin);
 8     scanf("%s",a);
 9     n=strlen(a);
10     for(len=2;len<=n;len++)//枚举子串的所有可能的长度
11     {
12         maxBegin=n-len;
13         for(begin=0;begin<=maxBegin;begin++)//枚举子串的开始点
14         {
15             j=begin+len-1;
16             for(i=begin;i<j;i++,j--) //遍历当前子串(a[i]~a[begin+len-1]),判断是否回文串
17             {
18                 if(a[i]!=a[j]) break;
19             }
20             if(i>=j)//是回文串
21             {
22                 j=begin+len-1;
23                 for(i=begin;i<=j;i++) printf("%c",a[i]);
24                 printf("\n");
25             }
26         }
27     }
28     return 0;
29 }
时间: 2024-09-29 03:26:55

回文子串[输出所有回文子串]的相关文章

最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和

参考:http://www.ahathinking.com/archives/124.html 最长公共子序列 1.动态规划解决过程 1)描述一个最长公共子序列 如果序列比较短,可以采用蛮力法枚举出X的所有子序列,然后检查是否是Y的子序列,并记录所发现的最长子序列.如果序列比较长,这种方法需要指数级时间,不切实际. LCS的最优子结构定理:设X={x1,x2,……,xm}和Y={y1,y2,……,yn}为两个序列,并设Z={z1.z2.……,zk}为X和Y的任意一个LCS,则: (1)如果xm=

hdu 3068 最长回文(manacher&amp;最长回文子串)

最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7317    Accepted Submission(s): 2500 Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input 输入有多组

最长连续公共子串、最长公共子串(可以非连续)、最长回文串(连续)、最长回文串(可以不连续)、最长递增数组的求解

问题:最长连续公共子串.最长公共子串(可以非连续).最长回文串(连续).最长回文串(可以不连续).最长递增数组.长方形镶嵌最多的求解 方法:上述问题有相似性,都可以采用动态规划进行求解. (1)最长连续公共子串: 如果A[i]==B[j], dp[i][j]=dp[i-1][j-1]+1; 否则,dp[i][j]=0; (2)最长公共子串(可非连续): 如果A[i]==B[j], dp[i][j]=dp[i-1][j-1]+1; 否则,dp[i][j]=dp[i-1][j-1]; (3)最长回文

java编写输入一个数判断是否是回文数,所谓回文数比如121,1221,6778776

package com.hao947; import java.util.Scanner; public class demo5 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int x = 0; x = scanner.nextInt(); System.out.println("请输入一个4-8位的数"); int dig[] = new int[10]; i

回文串---最长回文

HDU   3068 Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input 输入有多组case,不超过120组,每组输入为一行小写英文字符a,b,c...y,z组成的字符串S 两组case之间由空行隔开(该空行不用处理) 字符串长度len <= 110000 Output 每一行一个整数x,对应一组case,表示该组case的字符串中所包含的最长回文长度. Sample

任务移交的文档输出清单

只要有任务的移交就一定要有文档的输出,这个应该是大原则! 序号 交付件名称 是否必需品 交付件说明 交付件主要用途 如果不提供该交付件对项目的影响 1 产品设计文档 是 1.     功能设计文档 1.     需求评估时,查看相关功能设计 1.     需求容易出现遗漏,特别是一些变化较大产品 2.     数据库设计文档(枚举类型的需要每个值所代表的意义) 2.     数据库取数或者BUG查证时,便于进行数据核对 2.     开发效率低,需要不停的咨询他人 2 报表设计器,新工作流操作手

如何用pdfbox-app-1.8.10.jar批处理将pdf文档转换成text文档

1.首先下载pdfbox-app-1.8.10.jar(下载地址:http://pdfbox.apache.org/download.html) 2.将pdfbox-app-1.8.10.jar加载到eclipse工程中 1.新建java工程:Flie->New->Java Project,如PdfToText工程,然后右键该工程BuildPath->Configure Bulid Path..,单击Libaries,点击Add External JARs,将刚才下载好的pdfbox-a

删除子串,只要是原串中有相同的子串就删掉所有子串。子串至少两个字符。

//删除子串,只要是原串中有相同的子串就删掉所有子串.子串至少两个字符. #include<stdio.h> #include<string.h> char* delete_string(char s[],char a[]); int main() { char s[255]; char data[255][255];//存放相同的子串 int i,j,k; int length; int row = 0,column;//data[][]的行标和列标 gets(s); lengt

PowerDesigner(九)-模型文档编辑器(生成项目文档)(转)

模型文档编辑器 PowerDesigner的模型文档(Model  Report)是基于模型的,面向项目的概览文档,提供了灵活,丰富的模型文档编辑界面,实现了设计,修改和输出模型文档的全过程. 模型文档的功能如下: 为各个模型生成标准或定制的文档,并输出为RTF或HTML格式的文件 利用文档模板编辑器为模型文档提供统一的,定制的模板,类似于Word的模板功能 利用文档语言编辑器为模型文档提供各种语言,实现模型文档的国际化 既可以为每个模型生成单模型文档,也可以为几个模型生成多模型文档 文档模型编