题目:

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true
解释:"amanaplanacanalpanama" 是回文串
示例 2:

输入: "race a car"
输出: false
解释:"raceacar" 不是回文串

提示:

1 <= s.length <= 2 * 105
字符串 s 由 ASCII 字符组成

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

一、双指针

利用两个指针left和right分别指向字符串的首部和尾部,遍历并比较两个指针所指位置的字符是否相等即可。

1.先将字符串中的所有字符转换成小写字符;

2.循环字符串,判断其两个指针所指字符是否为数字或小写字符;

3.如果left,right指针对应字符不是数字和字母的,则让对应指针指向下一个位置,如果是,则判断是否一致,不一致返回false,一致返回true。

代码:

 1 class Solution {
2 public boolean isPalindrome(String s) {
3 String l = s.toLowerCase();
4 int n = l.length();
5 for(int i = 0, j = n-1; i < j;){
6 char left = l.charAt(i);
7 char right = l.charAt(j);
8 if(!(Character.isDigit(left) || Character.isLowerCase(left))){
9 i++;
10 continue;
11 }else if(!(Character.isDigit(right) || Character.isLowerCase(right))){
12 j--;
13 continue;
14 }
15 if(left != right){
16 return false;
17 }
18 i++;
19 j--;
20 }
21 return true;
22 }
23 }

二、利用StringBuffer的reverse方法来判断

1.先逐个字符读取到StringBuffer,过滤不需要字符,并将大写字符转换小写;
2.然后使用StringBuffer的reverse()方法翻转字符串,判断是否相等。

代码:

三、利用栈

将所有字母数字全部入栈,再全部出栈后就能得到反转,将入栈的内容与出栈的内容对比,完全相等那就是回文串。

代码:

 1 class Solution {
2 public boolean isPalindrome(String s) {
3 s = s.toLowerCase();
4 Stack stack = new Stack();
5 //保存入栈的内容
6 StringBuilder m1 = new StringBuilder();
7 //保存出栈的内容
8 StringBuilder m2 = new StringBuilder();
9 int n = s.length();
10 for(int i = 0; i < n; i++){
11 char c = s.charAt(i);
12 if(Character.isLetterOrDigit(c)){
13 stack.push(c);
14 m1.append(c);
15 }
16 }
17 while(!stack.empty()){
18 m2.append(stack.pop());
19 }
20 if(m1.toString().equals(m2.toString())){
21 return true;
22 }else{
23 return false;
24 }
25 }
26 }

 小知识:

1.toLowerCase() 方法将字符串转换为小写;

2.charAt(i) 函数 是获取字符串中i位置的字符;

str.charAt(i)的意思是第i个字符在字符串str中所占的位置,输出的是数字。

3.Character.isDigit()方法:

   Character.isDigit( c ),其中c是字符,这个方法可以用于判断字符c是不是数字形式的字符。

Character.isLowerCase() 方法:

 Character.isLowerCase(c),其中c是字符,用于判断字符c是否为小写字母。

Character.isLetterOrDigit()方法:

Character.isLetterOrDigit(c),其中c是字符,该方法用于判断字符c是字母还是数字。

4.String和StringBuffer他们都可以存储和操作字符串,即包含多个字符的字符串数据。

string类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。

5.StringBuffer的append()方法:类似于字符串的拼接,是在StringBuffer对象后面追加字符串

1 StringBuffer stringBuffer = new StringBuffer( "hello");
2 stringBuffer. append( "world" );
3 /*打印出helLoworLd*/
4 System.out.println( stringBuffer);

6.StringBuffer的reverse()方法:该方法的作用是将StringBuffer对象中的内容反转,然后形成新的字符串。

7.使用StringBuffer的toString()方法,可以将StringBuffer转换成String。

8.栈:先进后出

实例化:

Stack stack = new Stack();

进栈:把指定元素压入栈顶部

stack.push(c);

出栈:移除栈顶部的对象

stack.pop();

力扣125(java)-验证回文串(简单)的更多相关文章

  1. 力扣Leetcode 680. 验证回文字符串 Ⅱ

    验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca ...

  2. Java实现 LeetCode 125 验证回文串

    125. 验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, ...

  3. 力扣(LeetCode)验证回文串 个人题解

    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...

  4. LeetCode:验证回文串【125】

    LeetCode:验证回文串[125] 题目描述 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: ...

  5. 前端与算法 leetcode 125. 验证回文串

    目录 # 前端与算法 leetcode 125. 验证回文串 题目描述 概要 提示 解析 解法一:api侠 解法二:双指针 算法 传入测试用例的运行结果 执行结果 GitHub仓库 查看更多 # 前端 ...

  6. leetcode125. 验证回文串 python 简单

    125. 验证回文串 难度简单     给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: &quo ...

  7. 力扣(LeetCode)125. 验证回文串

    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...

  8. 力扣(LeetCode)验证回文串 个人题解(C++)

    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...

  9. leetcode.字符串.125验证回文串-Java

    1. 具体题目 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写.说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a pl ...

  10. 125. 验证回文串--LeetCode

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/valid-palindrome 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. ...

随机推荐

  1. stm32 使用多串口通信调试总结

    前记:   stm32使用多个串口通信,这个项目遇到了不少问题,值得反思和深入总结一下.   提纲:  这次的问题,主要有几个部分组成: A 多串口的DMA配置,这个需要注意,尽量不要使用同一个DMA ...

  2. 一个简易的ORM框架的实现(二)

    框架目标 什么是框架,框架能做到什么? 把一个方向的技术研发做封装,具备通用性,让使用框架的开发者用起来很轻松. 属性: 通用性 健壮性 稳定性 扩展性 高性能 组件化 跨平台 从零开始-搭建框架 建 ...

  3. 常用命令rsyncscp-1

    常用命令:rsync/scp scp scp命令文件传输 scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能 ...

  4. apache添加php模块

    实验介绍: apache本身只能发布静态网站,而添加了php模块就可以发布动态网站 一:下载php 进入php官方网址https://www.php.net/ 点击进入windows版本 下载thre ...

  5. RecyclerView瀑布流优化方案探讨

    目录介绍 01.规则瀑布流实现 02.不规则瀑布流实现 2.1 实现方式 2.2 遇到问题 03.瀑布流上拉加载 04.给瀑布流设置分割线 05.自定义Manager崩溃 06.如何避免刷新抖动 07 ...

  6. vue项目本地开发完成后部署到服务器后报404是什么原因呢?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.如何部署 前后端分离开发模式下,前后端是独立布署的,前端只需要将最后的构建物上传至目标服务器的web容器指定的静态目录下即可 我们知道 ...

  7. 李沐动手学深度学习pytorch实践笔记

    1.pytorch中的矩阵乘法: 2.标量对向量求导: 3.pytorch的backward函数: 4.如何直观理解梯度下降: 梯度,是个向量,有方向和长度就是向量,向量里的各个元素是偏导.是标量对向 ...

  8. 性能测试系列:Jmeter使用记录

    jmeter配置环境变量vi /etc/profileexport PATH=$PATH:/tmp/jmeter/apache-jmeter-5.4.1/binsource /etc/profile ...

  9. Shiro反序列化分析

    前言 Shiro,一个流行的web框架,养活了一大批web狗,现在来对它分析分析.Shiro的gadget是CB链,其实是CC4改过来的,因为Shiro框架是自带Commoncollections的, ...

  10. 聊聊微信小程序的隐私协议开发

    为什么需要隐私协议? 小程序隐私授权弹窗FAQ官方:https://developers.weixin.qq.com/community/develop/doc/00000ebac5c3e042384 ...