回文字串

发布时间 2023-10-13 19:36:51作者: Maxwell·

描述
    给定一个字符串,输出所有长度至少为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--)

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>

void subString(char str[],int n){
    int len,i,j,maxBegin,begin;
    for(len=2;len<=n;len++){
        maxBegin=n-len;
        for(begin=0;begin<=maxBegin;begin++){
            j=begin+len-1;
            for(i=begin;i<=j;i++,j--){
                if(str[i]!=str[j]) break;
            }
            if(i>=j){
                j=begin+len-1;
                for(i=begin;i<=j;i++) printf("%c",str[i]);
                printf("\n");
            }
        }
    }
} 

int main()
{
    char str[]="abbacddc123a321";
    subString(str,strlen(str));
    return 0;
}