半字符入栈的回文判定

2023-05-16

       回文是指正读反读均相同的字符序列;如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符序列是否是回文。(提示:将一半字符入栈)

       算法分析:回文的判定关键在于字符串是否是关于中心元素对称的,即将字符串逆序在与原字符串进行比较。由于栈具有先进后出的特点,所以栈是该问题的最佳解决方法,将字符串入栈,然后再进行弹出操作,与原字符串进行比较,相同即为回文。

       考虑到待测字符串会有长短的不同,短字符串用上述方法即可,但长字符串会造成时间的浪费,这时就应考虑回文的另一特点:是关于中心元素对称的。所以为了节省时间可以先将一半的字符串入栈然后再出栈与剩下的字符进行比对,当比对结果全部正确时,即为回文,反之则不是。

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//定义栈
typedef char ElemType;
typedef struct
{
	int stack_size;
	ElemType *top;
	ElemType *base;
}Stack;
enum Status{ ERROR, OK };

Status InitStack(Stack &S, ElemType *t)  //初始化栈
{
	int len = strlen(t);
	S.base = (ElemType *)malloc(len * sizeof(ElemType));
	if (S.base == NULL)
		return ERROR;
	S.top = S.base;
	S.stack_size = len;
}

//入栈
Status Push(Stack &S, ElemType e)
{
	if (S.top - S.base == S.stack_size)
		return ERROR;
	*S.top++ = e;
	return OK;
}

//出栈
Status Pop(Stack &S, ElemType &e)
{
	if (S.top == S.base)
		return ERROR;
	e = *--S.top;
	return OK;
}

//判空
int StackEmpty(Stack S)
{
	return (S.top == S.base);
}

Status Panduan(ElemType *t) //判断t[]是否为回文
{
	Stack S;
	ElemType e;
	int i, len;
	InitStack(S, t);
	len = strlen(t); //求数组长度
	for (i = 0; i<len / 2; i++)//将一半字符入栈
		Push(S, t[i]);
	if (strlen(t) % 2 == 1)
		i++;
	while (!StackEmpty(S))// 每弹出一个字符与相应字符比较
	{
		Pop(S, e);

		if (e != t[i])
			return ERROR;// 不等则返回0
		else  i++;
	}
	return OK; // 比较完毕均相等
}

int main()
{
	int len = 0;
	ElemType *a = NULL;
	printf("你要输入几个字符:");
	scanf("%d", &len);
	getchar();  //吃掉回车
	a = (ElemType *)malloc(len * sizeof(ElemType));
	printf("\n请输入待检测的字符串:");
	gets(a);

	if (Panduan(a))
		printf("\n是回文字符串");
	else
		printf("\n不是回文字符串");
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

半字符入栈的回文判定 的相关文章

  • 前端框架汇总合集(友友们可补充漏掉的前端框架)

    前端框架汇总 ReactVueAngularBootstrapFoundationSvelteAlpinePreactLitElementStimulusEmber React React JS 不像一个框架反而更像一个库 xff0c 但绝
  • Node.js 16 生命周期 结束日期提前

    将 Node js 16 的生命周期终止日期更改为 2023 年 9 月 11 日 概括Summary为什么 xff1f Why 我们评估了以下选项 We have evaluated the following options 概括 No
  • ubuntu系统用xshell远程连接

    1 在cmd窗口执行任何命令时请先登录管理员权限 xff08 将可避免很多问题 xff09 命令 xff1a sudo su xff08 回车然后输入密码 xff09 2 设置软件下载地址 xff08 推荐使用 阿里云服务器 xff09 3
  • 用VS进行图像处理

    一 1 在Windows下搭建VS 43 OpenCV平台 xff1a 2 修改名称 3 选择基于对话框 4 生成工程项目 xff0c 把自动生成的控件删除 xff0c 找到右边工具箱 xff0c 添加两个图片控件和一个按钮控件 5 分别更
  • 笔记(STM32篇)day1——工程创建、操作寄存器点灯

    目录 一 STM32F103VET6 二 创建工程 1 主要文件 2 生成文件 三 操作寄存器点灯 前言 这一年 xff0c 从调剂到各种找工作面试 去实习 xff0c 感受总结下来就是 出走半生 xff0c 归来仍是萌新 xff0c 作为
  • 网络服务——解析OSI七层模型及各层工作原理

    文章目录 一 OSI是什么 xff1f 二 OSI七层模型讲解1 七层结构的概念 xff1a 2 了解数据的传输协议 xff1a 三 OSI模型与TCP IP模型的比较四 TCP IP协议族的组成 xff1a 1 应用层 xff1a 2 传
  • Ubuntu系统安装配置arm-gcc交叉编译器

    下载好linux arm gcc压缩包 xff08 这里使用arm gcc版本为4 6 4 x86 64 xff09 注 xff1a 如果是VMware虚拟机要先安装VMware Tools xff0c 再将arm gcc压缩包导入虚拟机中
  • PTA数据库填空题

    检索学习全部课程的学生姓名 Sno Cno Cno 查询学生95001的姓名和所在系 Sno 61 39 95001 39 S 检索至少选修课程号为C2或C4的学生学号 CNO 61 39 C2 39 V SC 检索至少选修课程号为C2和C
  • python求列表最大值,最小值,和

    问题描述 给出n个数 xff0c 找出这n个数的最大值 xff0c 最小值 xff0c 和 输入格式 第一行为整数n xff0c 表示数的个数 第二行有n个数 xff0c 为给定的n个数 xff0c 每个数的绝对值都小于10000 输出格式
  • Ubuntu从16.04升级到18.04

    文章目录 起因具体步骤1 首先 xff0c 需要完全卸载ROS2 然后 xff0c 使用下列命令更新当前系统3 最后 xff0c 升级系统 起因 最近接手一台16 04Ubuntu的电脑 xff0c 界面操作很不习惯 xff0c 考虑升级到
  • 计算机网络 思科模拟器进行OSPF路由协议实验

    OSPF xff08 Open Shortst Path First xff0c 开放式最短路径优先 xff09 协议是目前网络中应用最广泛的动态路由协议之一 xff0c 也属于内部网关路由协议 xff0c 能够适应各种规模的网络环境 xf
  • C语言操作符—左移右移操作符

    文章目录 1 移位操作符十进制转二进制 1 2 lt lt 左移操作符1 2 1 gt gt 左移操作符 正数1 2 2 gt gt 左移操作符 负数 1 3 gt gt 右移操作符 96 注意 xff1a 移位操作符的操作数只能是整数 9
  • 求最大公约数之辗转相除法

    文章目录 一 前言二 辗转相除法原理三 用C语言求最大公约数 一 前言 最大公约数为两个及其以上的整数中约数最大的一个 也称为最大公因子 xff0c 最大公因数 a xff0c b的最大公约数记为 xff08 a xff0c b xff09
  • 使用FileZilla配置FTP服务器

    在拷贝大文件的时候 xff0c 由于Windows系统限制有时会拷贝失败 xff0c FTP Server可以解决文件的传输问题 FileZilla是一个很好的免费工具 xff0c 且版本没有强制要求 FileZilla支持F TP FTP
  • VMware 安装 银河麒麟高级服务器操作系统 V10 版本教程

    VMware 安装 银河麒麟高级服务器操作系统 V10 版本教程 目录 VMware 安装 银河麒麟高级服务器操作系统 V10 版本教程 银河麒麟的前世今生 安装过程 银河麒麟的前世今生 银河麒麟 xff08 KylinOS xff09 原
  • 配置python环境变量

    首先 xff0c 我们找到python安装目录 再找到pip exe的目录 然后我们快捷键Win 43 i进入Windows设置 xff0c 在查找设置里输入编辑系统环境变量 xff0c 进入到系统属性界面 点击环境变量 xff0c 找到P
  • 百钱百鸡问题

    中国古代数学家张丘建在在他的 算经 中提出这样一个 百钱百鸡问题 xff0c 鸡翁一 xff0c 值钱五 鸡母一 xff0c 值钱三 xff0c 鸡雏三 xff0c 值钱一 xff0c 百钱买百鸡 xff0c 问有翁 xff0c 母 xff
  • ajax前台传递数组到后台

    前台发送 ajax 请求到后台 xff0c 发现直接传递数组 xff0c 后台是接收不到的 xff0c 需要 ajax 加上一个 traditional 属性
  • SQL必知必会 - 插入/更新/删除数据

    目录 一 插入数据 INSERT 1 插入行 INSERT INTO 2 从表取数 插入他表 SELECT INTO 3 插入检索出的数据 二 复制数据CREATE 三 更新数据 update 拓展 replace函数 四 删除数据 DEL
  • 动态规划矩阵连乘求最优值和最优解

    问题描述 矩阵相乘最重要的方法是一般矩阵乘积 它只有在第一个矩阵的列数和第二个矩阵的行数相同时才有意义 给定n个矩阵 xff1a A1 A2 An xff0c 其中Ai与Ai 43 1是可乘的 xff0c i 61 1 xff0c 2 xf

随机推荐

  • epoll源码解析翻译------说使用了mmap的都是骗子

    本文地址 https www cnblogs com l2017 p 10830391 html https blog csdn net li haoren select poll epoll这三个都是对poll机制的封装 只是select
  • 修改django中的querydict

    方法一 xff1a Django 中的QueryDict is immutable QueryDict copy 代码如下 xff1a param form 61 Rule ParamEditModelForm data 61 reques
  • kafka 单机配置外网无法访问

    修改配置文件 root 64 localhost config root 64 localhost config pwd root kafka 2 12 1 0 1 config root 64 localhost config root
  • Linux 网卡配置

    1 复制网卡配置文件 xff0c 更名为指定文件 root 64 bogon network scripts cd etc sysconfig network scripts root 64 bogon network scripts ro
  • 结束进程 --inux命令

    简介 本文介绍Linux根据进程名结束 xff08 杀死 xff09 进程的命令 主要有三种方法 xff1a ps 43 grepkillallpkill kill 9 96 lsof t i lt port gt 96 1 xff1a p
  • Linux command

    1 根据端口port查进程 1 根据端口port查进程 netstat nap grep port root 64 localhost Init auto netstat nap grep 7777 tcp 0 0 192 168 2 24
  • Linux pip install python 包,异常分析

    pip install python 包异常如下 xff1a WARNING Running pip as the 39 root 39 user can result in broken permissions and conflicti
  • kafka 简介

    简单介绍kafka 安装以及简单的单节点使用说明 xff0c 仅供了解 安装配置 启动验证 1 安装 下载kafka 安装包 xff0c 并解压 再次个人安装kafak 2 12 1 0 1 2 配置 配置 kafka 2 12 1 0 1
  • scp 远程复制命令介绍

    scp r 复制文件 scp P xff1a 复制指定端口号 目标 主机A 文件复制到主机B某指定目录下 实例 xff1a 将服务器 192 168 2 101 中文件夹 home bd 复制到 192 168 2 77 的目录 home
  • Django 项目迁移

    Django 项目APP Initapp 更新数据库 PS D Work Git Init Web Risk Init Init Sys gt PS D Work Git Init Web Risk Init Init Sys gt pyt
  • Xmind 转 Excel or CSV 格式的TestCase

    Xmind 脑图转 TestCase 随笔记录 1 新建Python 项目 Open Pycharm gt File gt New Project 2 下载安装包 xmind2testcase 和xmind2testlink File gt
  • 服务器蓝屏怎么回事,怎么解决?

    最近有小伙伴和我表示 xff0c 打开服务器是遇到蓝屏了 xff0c 有点慌 xff0c 咨询我有没有什么解决办法 xff0c 今天我在这边总结一下 一 服务器蓝屏原因 xff1a 1 版本冲突 2 软硬件不兼容 3 应用程序存在着BUG
  • zookeeper 集群搭建

    准备环境修改hostname 永久修改hostname root 64 bogon java hostnamectl set hostname server 247 root 64 bogon java root 64 bogon java
  • 为什么更多APP开发者选择穿山甲作为游戏变现平台?

    当前手游行业发展迅速 xff0c 游戏APP用户存量稳定 xff0c 变现价值大 而在选择游戏变现平台时 xff0c 更多开发者青睐于穿山甲平台 穿山甲平台有何优势 为什么会受到这么多APP开发者的信赖呢 穿山甲是国内领先的第三方变现平台
  • 穿山甲平台助力开发者降本增效,技术进阶

    在存量市场 xff0c 变现是开发者的头等大事 xff0c 开发者想要冲破重围 xff0c 必须要探索自我商业化道路与模式 广告变现是当下众多开发者的选择 xff0c 广告变现的路径有两条 xff1a 一 xff0c 保证广告位的填充率 二
  • Debian安装JDK-17.0.5教程

    第一步 xff1a 创建一个java文件夹 mkdir java 第二步 xff1a 打开java文件夹 cd java 第三步 xff1a 下载Linux版本的JDK xff08 jdk 17 linux x64 bin tar gz必须
  • STM32 控制LED灯 亮灭

    lcd c include 34 led h 34 void Delay uint32 t count unsigned int i for count 61 0 count i 61 500 while i void LED GPIO C
  • 树莓派import cv2 失败解决方法

    设备 树莓派4b 问题简述 xff1a 原装系统自带python3 9 2 xff0c 参考了大佬流 浪 猫的教程 超简单教你在树莓派上安装opencv xff08 二 xff09 时 xff0c 遇到了一个依赖源的安装错误 xff0c 直
  • Ansible学习笔记

    目录 1 Ansible搭建 xff08 基于CentOS 7 9 xff09 1 1 在控制节点和被控节点获取epel源 1 2 安装Ansible 2 理论 3 基础配置 3 1 Ansible发送指令的原理 3 2 Ansible配置
  • 半字符入栈的回文判定

    回文是指正读反读均相同的字符序列 xff1b 如 abba 和 abdba 均是回文 xff0c 但 good 不是回文 试写一个算法判定给定的字符序列是否是回文 xff08 提示 xff1a 将一半字符入栈 xff09 算法分析 xff1