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

网站做相册/搜索排名提升

网站做相册,搜索排名提升,在酒吧里做那个视频网站,应用下载博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式:输出格式:样例: 💯方法一:我的第一种做法思路代码实现解析 💯方法二:我…

在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: C++

文章目录

  • 💯前言
  • 💯题目描述
    • 输入格式:
    • 输出格式:
    • 样例:
  • 💯方法一:我的第一种做法
    • 思路
    • 代码实现
    • 解析
  • 💯方法二:我的第二种做法
    • 思路
    • 代码实现
    • 解析
    • 改进建议
  • 💯方法三:老师的第一种做法
    • 思路
    • 代码实现
    • 解析
    • 优点
  • 💯方法四:老师的第二种做法
    • 思路
    • 代码实现
    • 解析
    • 优点
    • 缺点
  • 💯对比分析
  • 💯扩展:空间优化和实际应用
  • 💯小结


在这里插入图片描述


💯前言

  • 判断一个字符串是否为回文是编程中常见的问题。回文字符串是指从前往后读与从后往前读都一样的字符串。例如,“abcdedcba” 就是回文,而 “abcde” 则不是。对于这类问题,我们可以采用多种不同的算法来解决。在本篇文章中,我们将分析四种不同的做法,并进行对比与优化,以帮助大家更好地理解如何判断字符串是否为回文。
    C++ 参考手册
    在这里插入图片描述

💯题目描述

B2124 判断字符串是否为回文
在这里插入图片描述

输入一个字符串,判断该字符串是否是回文。回文是指顺读和倒读都一样的字符串。

输入格式:

输入一行字符串,长度小于100。

输出格式:

如果字符串是回文,输出 yes;否则,输出 no

样例:

输入

abcdedcba

输出

yes

💯方法一:我的第一种做法

思路

我的第一种做法是通过反转字符串来判断回文。首先,我们将原字符串反转,然后与原字符串进行比较。如果反转后的字符串与原字符串相等,则说明原字符串是回文。

代码实现

#include <iostream>
#include <string>
using namespace std;int main() {string s;cin >> s;  // 输入字符串int left = 0;int right = s.size() - 1;// 检查字符串的前半部分是否与后半部分对称while (left < right) {if (s[left] != s[right]) {cout << "no" << endl;  // 如果有不同字符,输出noreturn 0;}left++;right--;}cout << "yes" << endl;  // 如果没有不同字符,输出yesreturn 0;
}

解析

  1. 反转字符串:通过双指针方式,使用 leftright 两个指针分别从字符串的两端开始向中间移动,逐个比较字符。
  2. 时间复杂度:O(n),其中 n 是字符串的长度。我们最多需要遍历字符串的前半部分,进行字符比较。
  3. 空间复杂度:O(1),仅使用了常数的空间来存储指针 leftright

💯方法二:我的第二种做法

思路

在我的第二种做法中,我尝试使用了两次循环,首先将字符串反转到一个新的字符串 s2 中,然后通过逐字符对比 s2 和原字符串 s1 是否一致来判断回文。

代码实现

#include <iostream>
#include <string>
using namespace std;int main() {string s1, s2;while(cin >> s1) {s2.resize(s1.size());  for(int i = s1.size() - 1; i >= 0; i--) {s2[s1.size() - i - 1] = s1[i];}int temp = 1;for(int i = 0; i < s1.size(); i++) {if(s2[i] != s1[i]) {temp = 0;break;}}if(temp)cout << "yes" << endl;elsecout << "no" << endl;}return 0;
}

解析

  1. 字符串反转:首先创建一个 s2 字符串,并使用 for 循环反转 s1 字符串的内容,存储到 s2 中。
  2. 回文判断:然后通过逐个字符对比 s2s1,如果遇到不同的字符,则输出 no
  3. 存在问题
    • s2 没有预先调整大小s2 在反转前没有设置大小,可能会导致内存越界。可以通过 resize 来调整其大小。
    • 逻辑错误break 的位置存在问题,导致判断逻辑不正确,跳出循环时判断不够精确。

改进建议

通过双指针法可以优化空间使用,并且避免了额外的字符串存储开销。具体改进后我们会在后面介绍。

💯方法三:老师的第一种做法

思路

老师的第一种做法采用了双指针法。这是一种非常高效的方法。通过两个指针,分别从字符串的两端开始,逐个比较字符,如果出现不同的字符,就可以直接返回 no,否则直到两个指针相遇时,输出 yes

代码实现

#include <iostream>
#include <string>
using namespace std;int main() {string s;cin >> s;  // 输入字符串int left = 0;int right = s.size() - 1;while (left < right) {if (s[left] != s[right]) {cout << "no" << endl;  // 如果有不同字符,输出noreturn 0;}left++;right--;}cout << "yes" << endl;  // 如果没有不同字符,输出yesreturn 0;
}

解析

  1. 双指针法:通过两个指针 leftright 从字符串的两端向中间逼近。每次比较 s[left]s[right],如果发现不相等,直接返回 no,否则继续向中间推进。
  2. 时间复杂度:O(n),每次最多需要遍历一次字符串的长度。
  3. 空间复杂度:O(1),只使用了常数空间来存储两个指针。

优点

  1. 空间复杂度为 O(1),避免了额外的空间开销。
  2. 效率高,每次只进行一次字符比较,比反转字符串的方法更直接且高效。

💯方法四:老师的第二种做法

思路

老师的第二种做法使用了标准库中的 reverse 函数,将字符串反转后直接与原字符串进行比较。这是一种简洁的做法,但其空间复杂度稍高,因为需要额外的存储空间来保存反转后的字符串。

代码实现

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;int main() {string s;cin >> s;string t = s;reverse(t.begin(), t.end());  // 反转字符串if (t == s) cout << "yes" << endl;elsecout << "no" << endl;return 0;
}

解析

  1. 字符串反转:利用 reverse 函数将字符串 s 反转,并保存到 t 中。
  2. 回文判断:通过直接比较反转后的字符串 t 和原字符串 s 是否相等来判断回文。

优点

  1. 代码简洁:通过标准库函数,代码更加简洁和易懂。
  2. 实现简单:使用 reverse 可以减少手动反转字符串的工作量。

缺点

  1. 空间复杂度为 O(n),因为需要额外的字符串 t 来存储反转后的字符串。

💯对比分析

  1. 空间复杂度

    • 我的第一种做法和老师的第一种做法都使用了 O(1) 空间,通过双指针来直接判断回文。
    • 我的第二种做法和老师的第二种做法需要额外的 O(n) 空间来存储反转后的字符串。
  2. 时间复杂度

    • 所有方法的时间复杂度均为 O(n),其中 n 是字符串的长度。
  3. 可读性与简洁性

    • 我的第二种做法和老师的第二种做法通过反转字符串,代码简单易懂。
    • 我的第一种做法和老师的第一种做法更加高效,避免了不必要的空间开销。

💯扩展:空间优化和实际应用

在一些实际应用中,空间的使用往往是一个重要的考虑因素。如果我们能够通过优化算法减少空间复杂度,将会使得程序更高效。双指针法就是在空间优化方面的一个典型例子,它避免了反转字符串时的额外存储。

💯小结

本文通过分析四种不同的做法来判断字符串是否为回文,比较了它们在空间和时间复杂度上的表现。通过这几种做法,我们可以发现,双指针法在空间和时间上的优势较为明显,是最为推荐的解决方案。当然,对于小规模的问题,使用字符串反转的做法也不失为一种简洁高效的选择。

希望本篇文章能够帮助大家更好地理解字符串回文判断的不同做法,并能够根据实际问题选择合适的算法。


在这里插入图片描述


在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

相关文章:

【C++】B2124 判断字符串是否为回文

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述输入格式&#xff1a;输出格式&#xff1a;样例&#xff1a; &#x1f4af;方法一&#xff1a;我的第一种做法思路代码实现解析 &#x1f4af;方法二&#xff1a;我…...

人工智能学习(五)之机器学习逻辑回归算法

深入剖析机器学习逻辑回归算法 一、引言 在机器学习领域&#xff0c;逻辑回归是一种极为经典且应用广泛的算法。虽说名字里带有 “回归”&#xff0c;但它主要用于解决分类问题&#xff0c;在医学、金融、互联网等多个领域都发挥着关键作用。例如&#xff0c;在医学上辅助判断…...

Bash 基础与进阶实践指南

目录 Bash 简介与基础基本命令与文件操作权限管理与用户管理重定向与管道变量与环境变量通配符与正则表达式Shell 脚本结构与控制流常用内建命令与技巧文本处理常用命令作业控制与进程管理别名与函数实用技巧与注意事项更多 Bash 进阶话题参考资源 1. Bash 简介与基础 1.1 什…...

基于开源AI智能名片2 + 1链动模式S2B2C商城小程序视角下的个人IP人设构建研究

摘要&#xff1a;本文深入探讨在开源AI智能名片2 1链动模式S2B2C商城小程序的应用场景下&#xff0c;个人IP人设构建的理论与实践。通过剖析个人IP人设定义中的“诉求”“特质”“可感知”三要素&#xff0c;结合该小程序特点&#xff0c;阐述其对个人IP打造的影响与推动作用&…...

基于springboot+vue的航空散货调度系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

【C++】B2122 单词翻转

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 &#x1f4af;一、我的做法代码实现&#xff1a;代码解析思路分析 &#x1f4af;二、老师的第一种做法代码实现&a…...

OSCP 渗透测试:网络抓包工具的使用指南

在 OSCP 考试和渗透测试中&#xff0c;网络数据分析是至关重要的技能。无论是嗅探明文密码、分析恶意流量&#xff0c;还是溯源攻击&#xff0c;抓包工具都是我们的得力助手。 本文将介绍 OSI 七层网络模型 及其在网络分析中的作用&#xff0c;并详细讲解 Wireshark 和 tcpdum…...

Android 进程间通信

什么是IPC&#xff1f; Android 进程间通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09;是Android操作系统中不同进程间交换数据和资源的一种机制。由于Android是多任务操作系统&#xff0c;每个应用通常运行在自己的进程中&#xff0c;以提高安全性和…...

Kubernetes学习之通过Service访问Pod

一、基础概述 1.当通过deployment等controller动态创建和销毁pod使得每个pod都有自己的ip地址&#xff0c;当controller用新的pod替代发生故障的pod时&#xff0c;新的pod会分配到新的ip地址&#xff0c;那么客户端如何稳定的找到并访问pod提供的服务。 2.创建service service从…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.18 对象数组:在NumPy中存储Python对象

2.18 对象数组&#xff1a;在NumPy中存储Python对象 目录 #mermaid-svg-shERrGOBuM2rBzeB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-shERrGOBuM2rBzeB .error-icon{fill:#552222;}#mermaid-svg-shERrGOBuM2rB…...

Web - CSS3基础语法与盒模型

概述 这篇文章是关于 Web 前端 CSS3 的基础语法与盒模型的讲解。包括 CSS3 层叠性及处理冲突规则、伪元素和新增伪类元素、属性选择器等。还介绍了文本与字体属性&#xff0c;如段落和行相关属性、字体文本属性。最后阐述了盒子模型&#xff0c;如元素隐藏、行内与块元素转换、…...

CSS知识总结

CSS&#xff08;层叠样式表&#xff0c;Cascading Style Sheets&#xff09;是一种用于描述网页内容视觉表现的样式语言&#xff0c;与HTML&#xff08;结构&#xff09;和JavaScript&#xff08;行为&#xff09;共同构成现代Web开发的三大核心技术。 一、基本概念 定义&…...

基于Spring Security 6的OAuth2 系列之十 - 授权服务器--刷新token

之所以想写这一系列&#xff0c;是因为之前工作过程中使用Spring Security OAuth2搭建了网关和授权服务器&#xff0c;但当时基于spring-boot 2.3.x&#xff0c;其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0&#xff0c;结果一看Spring Security也升级…...

信息学奥赛一本通 2113:【24CSPJ普及组】小木棍(sticks) | 洛谷 P11229 [CSP-J 2024] 小木棍

【题目链接】 ybt 2113&#xff1a;【24CSPJ普及组】小木棍&#xff08;sticks&#xff09; 洛谷 P11229 [CSP-J 2024] 小木棍 【题目考点】 1. 思维题&#xff0c;找规律 【解题思路】 解法1&#xff1a;找规律 该题为&#xff1a;求n根木棍组成的无前导0的所有可能的数…...

安装hami的笔记

k3s环境下安装hami提示如下错误&#xff1a; "failed to “StartContainer” for “kube-scheduler” with InvalidImageName: "Failed to apply default image tag “registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.31.2k3s1”: 没有Inva…...

【区块链】区块链密码学基础

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 区块链密码学基础引言一、哈希函数1.1 基本概念1.2 数学表达 二、非对称加密2.1…...

强化学习笔记(5)——PPO

PPO视频课程来源 首先理解采样期望的转换 变量x在p(x)分布下&#xff0c;函数f(x)的期望 等于f(x)乘以对应出现概率p(x)的累加 经过转换后变成 x在q(x)分布下&#xff0c;f(x)*p(x)/q(x) 的期望。 起因是&#xff1a;求最大化回报的期望&#xff0c;所以对ceta求梯度 具体举例…...

【C语言入门】解锁核心关键字的终极奥秘与实战应用(三)

目录 一、auto 1.1. 作用 1.2. 特性 1.3. 代码示例 二、register 2.1. 作用 2.2. 特性 2.3. 代码示例 三、static 3.1. 修饰局部变量 3.2. 修饰全局变量 3.3. 修饰函数 四、extern 4.1. 作用 4.2. 特性 4.3. 代码示例 五、volatile 5.1. 作用 5.2. 代码示例…...

寒假day10

第十天&#xff1a;请写出以下几个数据的类型 整数 a int a的地址 int* 存放a的数组b …...

本地部署与使用SenseVoice语音大模型简析

前言 SenseVoice 是一种语音基础模型&#xff0c;具有多种语音理解功能&#xff0c;包括自动语音识别 (ASR)、口语识别 (LID)、语音情感识别 (SER) 和音频事件检测 (AED)。本博客将指导您安装和使用 SenseVoice 模型&#xff0c;使其尽可能方便用户使用。 Github 仓库链接: ht…...

Kafka SASL/SCRAM介绍

文章目录 Kafka SASL/SCRAM介绍1. SASL/SCRAM 认证机制2. SASL/SCRAM 认证工作原理2.1 SCRAM 认证原理2.1.1 密码存储和加盐2.1.2 SCRAM 认证流程 2.2 SCRAM 认证的关键算法2.3 SCRAM 密码存储2.4 SCRAM 密码管理 3. 配置和使用 Kafka SASL/SCRAM3.1 Kafka 服务器端配置3.2 创建…...

中间件漏洞之CVE-2024-53677

目录 什么是struts&#xff1f;CVE-2024-53677简介影响版本复现环境搭建漏洞利用修复 什么是struts&#xff1f; 在早期的 Java Web 开发中&#xff0c;代码往往混乱不堪&#xff0c;难以维护和扩展。比如&#xff0c;一个简单的用户登录功能&#xff0c;可能在不同的 Java 类…...

pytorch基于 Transformer 预训练模型的方法实现词嵌入(tiansz/bert-base-chinese)

以下是一个完整的词嵌入&#xff08;Word Embedding&#xff09;示例代码&#xff0c;使用 modelscope 下载 tiansz/bert-base-chinese 模型&#xff0c;并通过 transformers 加载模型&#xff0c;获取中文句子的词嵌入。 from modelscope.hub.snapshot_download import snaps…...

Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)

文章目录 一、环境准备二、安装Ollama2.1 访问Ollama官方网站2.2 下载适用于Windows的安装包2.3 安装Ollama安装包2.4 指定Ollama安装目录2.5 指定Ollama的大模型的存储目录 三、选择DeepSeek R1模型四、下载并运行DeepSeek R1模型五、常见问题解答六、使用Chatbox进行交互6.1 …...

区间覆盖问题

文章目录 1. 题面2. 简单分析3. 代码解答4. TLE的2点可能 1. 题面 给定 N N N个区间 [ a i , b i ] [a_i,b_i] [ai​,bi​] 以及一个区间 [ s , t ] [s,t] [s,t]&#xff0c;请你选择尽量少的区间&#xff0c;将指定区间完全覆盖。 输出最少区间数&#xff0c;如果无法完全…...

【LLM-agent】(task2)用llama-index搭建AI Agent

note LlamaIndex 实现 Agent 需要导入 ReActAgent 和 Function Tool&#xff0c;循环执行&#xff1a;推理、行动、观察、优化推理、重复进行。可以在 arize_phoenix 中看到 agent 的具体提示词&#xff0c;工具被装换成了提示词ReActAgent 使得业务自动向代码转换成为可能&am…...

SpringAI 人工智能

随着 AI 技术的不断发展&#xff0c;越来越多的企业开始将 AI 模型集成到其业务系统中&#xff0c;从而提升系统的智能化水平、自动化程度和用户体验。在此背景下&#xff0c;Spring AI 作为一个企业级 AI 框架&#xff0c;提供了丰富的工具和机制&#xff0c;可以帮助开发者将…...

【axios二次封装】

axios二次封装 安装封装使用 安装 pnpm add axios封装 // 进行axios二次封装&#xff1a;使用请求与响应拦截器 import axios from axios import { ElMessage } from element-plus//创建axios实例 const request axios.create({baseURL: import.meta.env.VITE_APP_BASE_API,…...

P7497 四方喝彩 Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c;有 m m m 个操作&#xff0c;分四种&#xff1a; add ⁡ ( l , r , v ) \operatorname{add}(l,r,v) add(l,r,v)&#xff1a;对于所有 i ∈ [ l , r ] i \in [l,r…...

深入剖析 Bitmap 数据结构:原理、应用与优化策略

深入理解 Bitmap 数据结构 一、引言 在计算机科学领域&#xff0c;数据的高效存储和快速处理一直是核心问题。随着数据量的不断增长&#xff0c;如何用最少的空间和最快的速度来表示和操作数据变得至关重要。Bitmap&#xff08;位图&#xff09;作为一种简洁而强大的数据结构…...