首页 > 其他分享 >回文字串

回文字串

时间:2023-10-13 19:45:49浏览次数:33  
标签:子串 输出 begin len 文字串 长度 回文

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

 

标签:子串,输出,begin,len,文字串,长度,回文
From: https://www.cnblogs.com/xusi/p/17762990.html

相关文章

  • 最长回文字串之暴力解法
    最长回文字串是一个典型的算法问题,首先要搞清楚什么是回文。回文,故名思义就是对称的文字,比如“ABA”,比如“ABABC”中的“AB“。题目如下:给你一个字符串s,找到s中最长......
  • Codeforces Round #837 (Div. 2)D (最大回文字串+树)
    题目链接:D.Hossamand(sub-)palindromictree题目描述给定一颗有n(n<=2e3)个顶点的树,每个顶点有一个点权(字符),定义s(u,v)为从u到v的简单路径所经过的点权形成的字符......
  • 力扣HOT100算法题5:最长回文字串
    文章目录​​一、题目​​​​二、方法一:解题思路​​​​三、方法一:代码解析​​​​四、方法二:动态规划​​​​五、方法二:代码解析​​一、题目给你一个字符串s,找到s......