牛客题解 | 判断是否为回文字符串

news/2025/2/22 15:02:57/文章来源:https://www.cnblogs.com/wc529065/p/18727278

题目

题目链接

题目的主要信息:
  • 判断字符串是否是回文字符
  • 回文字符即首尾相互往中靠,字符都是相同的
举一反三:

学习完本题的思路你可以解决如下题目:

BM13. 判断一个链表是否为回文结构

BM87. 合并两个有序数组

BM91. 反转字符串

方法一:首尾依次比较法(推荐使用)

知识点:双指针

双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个指针(特殊情况甚至可以多个),两个指针或是同方向访问两个链表、或是同方向访问一个链表(快慢指针)、或是相反方向扫描(对撞指针),从而达到我们需要的目的。

思路:

回文字符串正向遍历与逆向遍历结果都是一样的,因此我们可以准备两个对撞指针,一个正向遍历,一个逆向遍历。

//首指针
int left = 0; 
//尾指针
int right = str.length() - 1;
//首尾往中间靠  
while(left < right){  ......
}

具体做法:

  • step 1:准备两个指针,一个在字符串首,一个在字符串尾。
  • step 2:在首的指针往后走,在尾的指针往前走,依次比较路过的两个字符是否相等,若是不相等则直接就不是回文。
  • step 3:直到两指针在中间相遇,都还一致就是回文。因为首指针到了后半部分,走过的正好是尾指针走过的路,二者只是交换了位置,比较相等还是一样的。

图示:

图片说明

Java代码实现:

import java.util.*;
public class Solution {public boolean judge (String str) {//首指针int left = 0; //尾指针int right = str.length() - 1;//首尾往中间靠  while(left < right){  //比较前后是否相同if(str.charAt(left) != str.charAt(right)) return false;left++;right--;}return true;}
}

C++代码实现:

class Solution {
public:bool judge(string str) {//首指针int left = 0; //尾指针int right = str.length() - 1;  //首尾往中间靠while(left < right){//比较前后是否相同 if(str[left] != str[right]) return false;left++;right--;}return true;}
};

Python实现代码:

class Solution:def judge(self , str: str) -> bool:#首指针left = 0 #尾指针right = len(str) - 1 #首尾往中间靠while left < right :#比较前后是否相同if str[left] != str[right] :return Falseleft += 1right -= 1return True

复杂度分析:

  • 时间复杂度:\(O(n)\),其中\(n\)为字符串长度,最多遍历半个字符串
  • 空间复杂度:\(O(1)\),除了常数个临时变量,无额外辅助空间
方法二:反转字符串比较法(扩展思路)

思路:

既然字符串正向遍历与逆向遍历遇到字符都相等,那我们就反转字符串,看看它到底是不是正逆都一样,因为字符串支持整体比较,因此我们可以比较反转后的字符串与原串是不是相等。

具体做法:

  • step 1:使用reverse函数将字符串反转。
  • step 2:比较反转后的字符串,还是与原来的字符串相等,则是回文字符串。

Java代码实现:

import java.util.*;
public class Solution {public boolean judge (String str) {StringBuffer temp = new StringBuffer(str);//反转字符串String s = temp.reverse().toString();//比较字符串是否相等if(s.equals(str))return true;return false;}
}

C++代码实现:

class Solution {
public:bool judge(string str) {string temp = str;//反转字符串reverse(str.begin(), str.end()); //比较字符串是否相等if(temp == str)return true;return false;}
};

Python实现代码:

class Solution:def judge(self , str: str) -> bool:temp = str#反转字符串str = str[::-1] #比较字符串是否相等if temp == str:return Truereturn False

复杂度分析:

  • 时间复杂度:\(O(n)\),反转字符串和比较字符串都是\(O(n)\)
  • 空间复杂度:\(O(n)\),辅助字符串temp记录原来的字符串

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/887263.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek满血版在IDEA中快的飞起

现在国内的 AI 竞争,已经不是单纯的“谁的模型更强”,而是谁的 AI 生态更繁荣。阿里云靠开源,把自己送上了这个生态的核心位置。当同行还在用API调用次数计算商业价值时,阿里云已化身 AI 时代的"技术普惠者"。作者:沉默王二 有没有发现?不知不觉中,阿里已经完…

牛客题解 | 兑换零钱(一)

牛客输入输出题单题解题目 题目链接 题目主要信息:给定数组arr,arr中所有的值都为正整数且不重复 arr中每个值代表一种面值的货币,每种面值的货币可以使用任意 组成aim的最少货币数 如果无解,请返回-1举一反三: 本题属于背包问题的一种简化版本,学习完本题的思路帮助你解…

牛客题解 | 删除有序链表中重复的元素-I

牛客输入输出题单题解题目 题目链接 题目主要信息:给定一个从小到大排好序的链表 删去链表中重复的元素,每个值只留下一个节点举一反三: 学习完本题的思路你可以解决如下题目: BM16. 删除有序链表中重复的元素-II 方法:遍历删除(推荐使用) 思路: 既然连续相同的元素只留…

牛客题解 | 二叉树的前序遍历

牛客输入输出题单题解题目 题目链接 题目的主要信息:给定一颗二叉树的根节点,输出其前序遍历的结果举一反三: 学习完本题的思路你可以解决如下题目: BM24.二叉树的中序遍历 BM25.二叉树的后序遍历 方法一:递归(推荐使用) 知识点:二叉树递归 递归是一个过程或函数在其定…

牛客题解 | 二叉树的后序遍历

牛客输入输出题单题解题目 题目链接 题目的主要信息:给定一颗二叉树的根节点,输出其后序遍历的结果举一反三: 学习完本题的思路你可以解决如下题目: BM23.二叉树的前序遍历 BM24.二叉树的中序遍历 方法一:递归(推荐使用) 知识点:二叉树递归 递归是一个过程或函数在其定…

FB内部使用地址寄存器案例 - 32位指针区域内间接寻址

案例内容:实现DQ32模块通道依次循环输出。利用循环左移指令,把默认值位16#1的DWORD循环左移,最后绑定QD,实现DQ32模块通道依次循环输出。限制1:不使用SCL实现,而用STL或LAD来实现。 限制2:DWORD被拆分为bit的时候会因大端模式导致的输出对应异常,需要重新梳理bit位和实际…

牛客题解 | 二分查找-I

牛客输入输出题单题解题目 题目链接 题目的主要信息:给定一个元素升序的、无重复数字的整型数组 nums 和一个目标值 target 找到目标值的下标 如果找不到返回-1举一反三: 学习完本题的思路你可以解决如下题目: BM18.二维数组中的查找 BM19.寻找峰值 BM21.旋转数组 方法:二分…

ML树构建简明教程

数据准备 Teamviewer登录实验室服务器,访问http://172.17.128.86:8501/CleanData,按照页面对应的格式要求分别从NCBI和GISAID数据库下载数据,拖拽到对应的位置,点击GO即可。Gisaid DNA Accession no.|DNA INSDC|Isolate name|Collection date|SegmentNCBI Format:>{acc…

windows11安装

准备工作 1.一个8G以上的U盘 2.可以上网的电脑 3.要安装的电脑接好可上网的网线开始:把U盘的资料先备份,因为制作U盘安装系统需要格式化U盘 打开微软官网下载 https://www.microsoft.com/zh-cn/software-download/windows11选择创建 Windows 11 安装媒体,会下载一个"me…

DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?

2025年伊始,Meta创始人扎克伯格的一则声明引发全球程序员热议:“AI将在今年达到中级工程师水平,逐步接管编程工作。”与此同时,国产AI大模型DeepSeek的爆火,让一名8岁女孩仅用45分钟开发出聊天机器人的案例刷屏全网。AI的代码能力已从“辅助工具”跃升为“协同开发者”,程…

java-调用火山引擎官方API

java-调用火山引擎官方API(字节跳动旗下的AI服务平台),AI模型包括:DeepSeek、豆包、其他。。。 2025-02-20 16:33:06 星期四一、官方平台入口: 入口如下:https://console.volcengine.com/user/basics/ 1>.使用方式:1.在开放平台注册账号具体按照指引及进行注册即可,包…

reactnative 手写签名报错

有没有大佬知道这种问题怎么解决!!!!! 在线等!!!