当前位置: 首页 > news >正文

7-1回文判断(栈和队列PTA)

回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文。

若用C++,可借助STL的容器实现。

输入格式:

输入待判断的字符序列,按回车键结束,字符序列长度<20。

输出格式:

若字符序列是回文,输出“YES”;否则,输出“NO”。

输入样例:

abdba

输出样例:

YES

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB


解题代码

两种实现方式:

C#

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAXSIZE 20typedef struct Stack {char data[MAXSIZE];int top;
} Stack;void InitStack(Stack *s) {s->top = -1;
}void Push(Stack *s, char x) {if (s->top == MAXSIZE - 1) {printf("Stack is full\n");exit(1);}s->data[++s->top] = x;
}char Pop(Stack *s) {if (s->top == -1) {printf("Stack is empty\n");exit(1);}return s->data[s->top--];
}int main() {char input[MAXSIZE];fgets(input, MAXSIZE, stdin);input[strcspn(input, "\n")] = '\0'; // 去掉换行符Stack s;InitStack(&s);int len = strlen(input);// 将前半部分字符压入栈中for (int i = 0; i < len / 2; ++i) {Push(&s, input[i]);}// 如果字符序列长度为奇数,跳过中间的字符int start = (len % 2 == 0) ? len / 2 : len / 2 + 1;// 检查后半部分字符是否与栈中的字符匹配for (int i = start; i < len; ++i) {if (Pop(&s) != input[i]) {printf("NO\n");return 0;}}printf("YES\n");return 0;
}

C++

#include <iostream>
#include <stack>
#include <string>using namespace std;int main() {string input;getline(cin, input); // 读取输入的字符序列stack<char> s;int len = input.length();// 将前半部分字符压入栈中for (int i = 0; i < len / 2; ++i) {s.push(input[i]);}//如果字符序列长度为偶数 (len % 2 == 0),则从 len / 2 开始比较。//如果字符序列长度为奇数 (len % 2 != 0),则从 len / 2 + 1 开始比较,跳过中间的字符int start = (len % 2 == 0) ? len / 2 : len / 2 + 1;// 检查后半部分字符是否与栈中的字符匹配for (int i = start; i < len; ++i) {if (s.top() != input[i]) {cout << "NO" << endl;return 0;}s.pop();}cout << "YES" << endl;return 0;
}

可以看出C++的实现方式要大大简便

具体简便之处

  1. 内存管理

    • C++stack<char> s; 自动管理内存。
    • C:需要手动初始化栈,并管理内存分配和释放。
  2. 数据结构实现

    • C++:直接使用 stack 容器。
    • C:需要定义 Stack 结构体,并实现 Push 和 Pop 函数。
  3. 接口和操作

    • C++s.push(input[i]); 和 s.top() 等操作非常简洁。
    • C:需要自己实现 Push 和 Pop 函数,并处理栈满和栈空的情况。
  4. 异常处理

    • C++:STL 容器在操作失败时会抛出异常。
    • C:需要手动检查每个操作的返回值,并处理错误。
  5. 泛型编程

    • C++:STL 容器是模板类,可以存储任意类型的数据。
    • C:需要使用 void* 指针和类型转换来实现类似的功能。

通过这些对比,可以看出 C++ STL 容器在编写代码时更加简便和高效,减少了手动管理内存和实现数据结构的复杂性,使代码更加简洁和易于维护。

相关文章:

7-1回文判断(栈和队列PTA)

回文是指正读反读均相同的字符序列&#xff0c;如“abba”和“abdba”均是回文&#xff0c;但“good”不是回文。编写一个程序&#xff0c;使用栈判定给定的字符序列是否为回文。 若用C&#xff0c;可借助STL的容器实现。 输入格式: 输入待判断的字符序列&#xff0c;按回车…...

使用 NCC 和 PKG 打包 Node.js 项目为可执行文件(Linux ,macOS,Windows)

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 &#x1f4d8; 文章引言 步骤 1&#xff1a;…...

LeetCode:2747. 统计没有收到请求的服务器数目(滑动窗口 Java)

目录 2747. 统计没有收到请求的服务器数目 题目描述&#xff1a; 实现代码与解析&#xff1a; 滑动窗口 原理思路&#xff1a; 2747. 统计没有收到请求的服务器数目 题目描述&#xff1a; 给你一个整数 n &#xff0c;表示服务器的总数目&#xff0c;再给你一个下标从 0 开…...

项目管理工具--【项目策划任务书】模板

项目策划任务书是项目管理中的重要文件&#xff0c;它详细描述了项目的各个方面&#xff0c;以确保项目能够顺利进行。撰写项目策划任务书时需要考虑以下几个关键要素&#xff1a; 基本信息&#xff1a;包括项目名称、负责人、所在单位、联系方式以及日期等基本信息&#xff0c…...

雷池社区版那么火,为什么站长都使用雷池社区版??

雷池社区版是长亭科技开发的一款免费开源的 Web 应用防火墙&#xff08;WAF&#xff09;&#xff0c;具有诸多优势&#xff0c;因此值得使用。 防护效果强大。能够检测并防御各种网络攻击&#xff0c;包括 SQL 注入、跨站脚本&#xff08;XSS&#xff09;、跨站请求伪造&#x…...

分布式日志有哪些?

分布式日志系统&#xff08;Distributed Logging Systems&#xff09;是在分布式计算环境中用来收集、存储和管理来自多个节点的日志数据的系统。这些系统通常设计用于处理高并发、大规模的日志数据流&#xff0c;并提供强大的查询和分析功能。 一、定义与背景 分布式系统通常…...

ETCD未授权访问风险基于角色认证和启用https的ca证书修复方案

ETCD未授权访问风险安全漏洞修复方案 ETCD未授权访问风险介绍基于角色认证的访问控制&#xff08;BASIC认证&#xff09;基于ca证书的https访问控制&#xff08;TLS传输&#xff09;下载cfssl认证配置工具生成ca认证证书修改etcd配置方式一方式二 访问etcd节点信息 patroni使用…...

执行Django项目的数据库迁移命令时报错:(1050, “Table ‘django_session‘ already exists“);如何破?

一、问题描述&#xff1a; 当我们写Django时&#xff0c;由于自己的操作不当&#xff0c;导致执行数据库迁移命令时报错&#xff0c;报错的种类有很多&#xff0c;例如&#xff1a; 迁移文件冲突&#xff1a;可能你有多个迁移文件试图创建同一个表。数据库状态与迁移文件不同…...

问丫:创新社交平台的技术魅力与发展潜力

最近偶然间发现了一个很特别的社交网站&#xff0c;叫问丫。一开始我也只是抱着随便看看的心态去了解一下&#xff0c;没想到这个网站还蛮有意思的。 这个网站是由 LLMWorld 推出的&#xff0c;据说是一款跨时空跨次元的社交新产品。这个描述给网站蒙上了一层魔幻的纱布&#…...

iOS Swift逆向——被编译优化后的函数参数调用约定修复

头文件导入&#xff1a; typedef long long s64; typedef unsigned long long u64;typedef s64 Int; typedef u64 Bool;struct Swift::String {u64 _countAndFlagsBits;void *_object; };union Swift_ElementAny {Swift::String stringElement; };struct Swift_Any {Swift_Ele…...

self-supervised learning(BERT和GPT)

1芝麻街与NLP模型 我們接下來要講的主題呢叫做Self-Supervised Learning&#xff0c;在講self-supervised learning之前呢&#xff0c;就不能不介紹一下芝麻街&#xff0c;為什麼呢因為不知道為什麼self-supervised learning的模型都是以芝麻街的人物命名。 因為Bert是一個非常…...

基于RBF神经网络的双参数自适应光储VSG构网逆变器MATLAB仿真模型

“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 此模型源侧部分采用光伏发电系统与混合储能系统&#xff08;蓄电池超级电容&#xff09;&#xff0c;并网逆变器采用虚拟同步发电机&#xff08;VSG&#xff09;控制&#xff0c;为系统提供惯量阻尼支撑。同…...

Openpyxl--学习记录

1.工作表的基本操作 1.1 工作表的新建打开与保存 1.1.1 创建工作簿 from openpyxl import Workbook from pathlib import Pathfile_path Path.home() / "Desktop" / "123.xlsx"# 1.创建工作簿 wb Workbook() # 2.访问默认工作簿 ws wb.active # 3.填充…...

高边坡稳定安全监测预警系统解决方案

一、项目背景 高边坡的滑坡和崩塌是一种常见的自然地质灾害&#xff0c;一但发生而没有提前预告将给人民的生命财产和社会危害产生严重影响。对高边坡可能产生的灾害提前预警、必将有利于决策者采取应对措施、减少和降低灾害造成的损失。现有的高边坡监测技术有人工巡查和利用测…...

计算机毕业设计 | vue+springboot借书管理 图书馆管理系统(附源码)

1&#xff0c;项目背景 1.1 课题背景 随着现在科学技术的进步&#xff0c;人类社会正逐渐走向信息化&#xff0c;图书馆拥有丰富的文献信息资源&#xff0c;是社会系统的重要组成部分&#xff0c;在信息社会中作用越来越重要&#xff0c;在我国图书馆计算机等 信息技术的应用…...

vue3 腾讯地图 InfoWindow 弹框

1、vue项目index.html引入地图js 2、页面使用 <script setup lang"ts"> import { useMapStore } from //store;defineOptions({ name: PageMap }); const emits defineEmits([update:area, update:address, update:latitude, update:longitude]); const prop…...

【Linux】解锁进程间通信奥秘,高效资源共享的实战技巧

管道、共享内存、消息队列、信号量 1. 进程间通信1.1. 目的1.2. 概念和本质1.3. 分类 2. 管道2.1 概念2.2. 4种情况2.3. 4种特性2.4. 匿名管道2.4.1. 原理2.4.2. 概念2.4.3. 创建 — pipe()2.4.4. 应用场景 — 进程池 2.5. 命名管道2.5.1. 概念和原理2.5.2. 创建 — mkfifo()2.…...

O1 Nano:OpenAI O1模型系列的简化开源版本

概览 O1 Nano 是一个开源项目&#xff0c;它实现了 OpenAI O1 模型系列的简化版本。O1 模型是一个高级语言模型&#xff0c;它在训练和推理过程中整合了链式思维和强化学习。这个实现版本&#xff0c;称为 O1-nano&#xff0c;专注于解决算术问题&#xff0c;以展示模型的能力。…...

浅谈人工智能之Llama3微调后使用cmmlu评估

浅谈人工智能之Llama3微调后使用cmmlu评估 引言 随着自然语言处理&#xff08;NLP&#xff09;技术的发展&#xff0c;各类语言模型如雨后春笋般涌现。其中&#xff0c;Llama3作为一个创新的深度学习模型&#xff0c;已经在多个NLP任务中展示了其强大的能力。然而&#xff0c…...

为什么需要MQ?MQ具有哪些作用?你用过哪些MQ产品?请结合过往的项目经验谈谈具体是怎么用的?

需要使用MQ的主要原因包括以下几个方面‌&#xff1a; ‌异步处理‌&#xff1a;在分布式系统中&#xff0c;使用MQ可以实现异步处理&#xff0c;提高系统的响应速度和吞吐量。例如&#xff0c;在用户注册时&#xff0c;传统的做法是串行或并行处理发送邮件和短信&#xff0c;这…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...