顺序栈来判断回文串

#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;

#define StackSize 100
typedef char DataType;
typedef struct{
    DataType data[StackSize];
    int top;
}SeqStack;
/*void Int(SeqStack *s){
    s->top=-1;
}*/
int judge(SeqStack *s,char *t){

    int i,len;
    char temp;
    len=strlen(t);
    for ( i = 0; i <len/2; i++)
    {if(s->top<StackSize-1){
        s->data[++s->top]=t[i];
    }else
    {
        printf("Stack Overflow");
        exit;
    }

    }
    if (len%2==1) i++;
    while (s->top>-1)
    {
        temp=s->data[s->top--];
        if (temp!=t[i]) return 0;
        else    i++;
    }
    return 1;
}
int main(){
    SeqStack *s;
    s=(SeqStack*)malloc(sizeof(SeqStack));//注意这里如果是C语言先要初始化,不然会出错。
    s->top=-1;
    char t[250];
    cin>>t;
    cout<<judge(s,t)<<endl;

}
时间: 2024-12-22 02:00:15

顺序栈来判断回文串的相关文章

JAVA用递归来判断回文串

用递归来判断回文串 思路: ①首先如果是空串,一个字符,则判断是回文串 ②若不满足①,则我们需要对字符串进行递归判断,我们会想到要用第一个字符和最后一个字符进行比较,若相同则,第二个和倒数第二个进行比较,如此循环往复,就会出现一个终点 ③终点处会出现两种情况,第一种情况:两个不同位置的字符进行比较,第二种情况是:两个相同位置的字符进行比较.因此我们需要找出这个中间值,我们通过分奇偶的方式,算出最终左边要比较的数的下标,若为奇数,左边的下标为:len/2;若为偶数,左边的下标为:len/2: ④递

例题9-7 划分成回文串 UVa11584

1.题目描述:点击打开链接 2.解题思路:本题要求划分回文串,且个数尽可能的少.可以用动态规划解决.先提前判断i~j是否构成回文串,时间复杂度是O(N^2),然后定义d(i)表示0~i-1划分成的回文串的最小个数.则状态转移方程为: d(i)=min(d(i),d(j)+1)(s[j...i]是回文串) 上式中,d(i)的初始值是i,这样每次判断只需要O(1)的时间,总时间复杂度是O(N^2).当然,判断回文串的过程可以和状态转移相结合,细节请参考第二份代码. 3.代码: #define _CR

bzoj 2565: 最长双回文串

Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba",不相同).输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串. Input 一行由小写英文字母组成的字符串S. Output 一行一个整数,表示最长双回文子串的长度. Sample Input baacaabbacabb Sample Output 12 HINT

BZOJ2565:最长双回文串

2565: 最长双回文串 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2195  Solved: 1119[Submit][Status][Discuss] Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba",不相同). 输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都

回文串和镜像串(摘)

#include<iostream> #include<stdio.h> #include<string.h> #include<ctype.h> const char* rev="A 3 HIL JM O 2TUVWXY51SE Z 8 "; //前26项为各个大写字母的镜像,后10个是数字1至9的镜像(不输入数字0) const char* msg[]={"not a palindrome","a reg

2565: 最长双回文串 - BZOJ

Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba",不相同). 输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串.Input 一行由小写英文字母组成的字符串S. Output 一行一个整数,表示最长双回文子串的长度.Sample Input baacaabbacabb Sample Output 12 HINT

Palindrome Number(回文串)

题目: Determine whether an integer is a palindrome. Do this without extra space. 分析: 该题目来源于leetcode.回文串是一个正读和反读都一样的字符串,比如"level"或者"noon"等等就是回文串.当然整数形式的回文串也是类似的.但负数不是回文串.两种思路: 按定义来,依次比较串的首尾,直到中间相隔1个或0个元素(取决于整数是奇数位数还是偶数位数).优点是当不是回文串时,可以很快发

链表回文串判断&amp;&amp;链式A+B

有段时间没有练习了,链表回文串判断用到了栈.链式A+B将没有的项用0补充.链表有没有头节点,及结点和链表的区别,即pNode和pHead. //#include<iostream> //using namespace std; // //class Base { //public: // Base(int j) : i(j) {} // virtual~Base() {} // void func1() { // i *= 10; // func2(); // } // int getValu

关于回文串的点点滴滴

还是第一次发博文呢.嗯,最近在尝试每天做一道编程题,当然,我要求自己只能用C语言实现.一方面可增加自己对C函数库的熟悉程度,另一方面也想增加自身的编码经验.毕竟,感觉平时Code的时间严重不够.对于一个职业Coder来说这样肯定不太好嘛! 好吧,回到正题吧.今天的题目内容很常规.就是判断用户输入的字符串是否是一个回文串,当然,难度稍微增加那么点,就是同时能够在一个字符串中找到所有的回文子串同时输出.想必,关于回文串的定义就没什么可说的了吧,比如"abba"就是个回文串,此外,还要能找出