回文串判定

回文串判定

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

输入一串字符(长度小于100),判断该串字符是否是回文串(正序读与逆序读内容相同)。

输入

输入一串字符(长度小于100)。

输出

若该串字符是回文串输出“yes",否则输出”no“。

示例输入

asdfgfdsa

示例输出

yse


这道题第一次写了,(没用栈),后来用栈后对了。。。

(第一次代码)

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

int main()
{
    char s[200];
    scanf("%s",s);
    int l=strlen(s);
    int f;
    for(int i=0;i<l/2;i++)
    {
        if(s[i]!=s[l-i-1])
        {
            f=0;break;
        }
        else f++;
    }
    if(!f) printf("no\n");
    else printf("yes\n");
    return 0;
}

(第二次正确的代码)

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


#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define maxsize 200

typedef char Elemtype;
typedef int Status;

typedef struct
{
    Elemtype data[maxsize];
    int top;
}Stack;

Status Initstack (Stack &S)
{
    S.top=-1;
    return OK;
}

Status Push(Stack &S,char e)
{
    if(S.top==maxsize-1) return ERROR;
    S.top++;
    S.data[S.top]=e;
    return OK;
}




### 判断回文串的算法实现 对于判断一个字符串是否为回文串,存在多种不同的方法。一种较为高效的方式是由欧拉、莫顿、巴斯基、汉斯提出的渐进回文判定法,这种方法通过比较首末字符是否相同以及是否存在唯一公共字符等条件来进行快速判断[^1]。 #### C语言中的具体实现方式如下: ```c #include <stdbool.h> #include <string.h> bool isPalindrome(char str[]) { int start = 0; int end = strlen(str) - 1; while (start < end) { if (str[start++] != str[end--]) { return false; // 非回文情况 } } return true; // 是回文的情况 } ``` 这段代码展示了如何使用简单的循环结构来逐位对比输入字符串两端对应的字符,从而确定它是不是回文串[^2]。 当处理特定长度较短的数据集时,比如题目限定的是四位十进制数,则可以直接拆分进行单独验证,这样能够进一步简化逻辑复杂度[^3]。 另外,在某些高级编程环境中还可以借助更复杂的抽象数据类型如(stack),以辅助完成这一任务。例如在C++中就可以定义一个基于模板类的解决方案[^4]: ```cpp template<typename T> class StackBasedPalindromeChecker { private: std::stack<T> s; public: bool check(const std::vector<T>& input){ for(auto& elem : input){ s.push(elem); } auto reversed_it = input.rbegin(); while(!s.empty()){ if(s.top() != *reversed_it++){ return false; } s.pop(); } return true; } }; ``` 而在Java里同样也可以运用类似的思路——即先将待测序列压入堆后再逐一弹出来同原序列对应位置上的元素做匹配操作;此外还有其他变种形式,像针对含有特殊标记符"x"的情形下所做的调整[^5].
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值