当前位置: 首页 > 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;这…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...

接口 RESTful 中的超媒体:REST 架构的灵魂驱动

在 RESTful 架构中&#xff0c;** 超媒体&#xff08;Hypermedia&#xff09;** 是一个核心概念&#xff0c;它体现了 REST 的 “表述性状态转移&#xff08;Representational State Transfer&#xff09;” 的本质&#xff0c;也是区分 “真 RESTful API” 与 “伪 RESTful AP…...

C#最佳实践:为何优先使用as或is而非强制转换

C#最佳实践&#xff1a;为何优先使用as或is而非强制转换 在 C# 的编程世界里&#xff0c;类型转换是我们经常会遇到的操作。就像在现实生活中&#xff0c;我们可能需要把不同形状的物品重新整理归类一样&#xff0c;在代码里&#xff0c;我们也常常需要将一个数据类型转换为另…...