题目:

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

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

示例 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. Centos挂在U盘的时候无法挂载

    网上的教学视频大部分全是以centos为教材底子--没办法更换系统了,这样方便麻! 我参考的文章: https://blog.csdn.net/shengjie87/article/details/1 ...

  2. 音频重采样48kk转16k

    作为一个音频算法工程师,不懂重采样怎么可以呢?这里做一个常用的方法介绍: pcm转wav: ffmpeg -f s16le -ar 8000 -ac 2 -i out.pcm -ar 44100 -a ...

  3. Go | Gin 解决跨域问题跨域配置

    Go | Gin 解决跨域问题跨域配置 目录 一.关于跨域解决方案 二.使用步骤 1. 编写一个中间件 2. 使用 3. 注意事项 一.关于跨域解决方案 关于跨域的解决方法,大部分可以分为 2 种 n ...

  4. 后端基础PHP—正则表达

    后端基础PHP-正则表达式 1.正则表达式的介绍 2.正则表达式的语法 一.正则表达式的介绍 正则表达式的介绍 · 正则表达式,又称规则表达式,通过一种特殊的语言来挑选符合条件的数据 · 在代码中简写 ...

  5. Android打造万能自定义阴影控件

    目录介绍 01.阴影效果有哪些实现方式 02.实现阴影效果Api 03.设置阴影需要注意哪些 04.常见Shape实现阴影效果 05.自定义阴影效果控件 06.如何使用该阴影控件 07.在recycl ...

  6. PLC与上位机传递数据

    1.我这里使用的是HslCommunication 假如传递的是word类型,PLC以16进制封装数组,它有预留,我扩充 PLC博图上是 word[5] 上位机接收 ushort[] Data1=ne ...

  7. 记录--Vue3基于Grid布局简单实现一个瀑布流组件

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在学习Grid布局之时,我发现其是CSS中的一种强大的布局方案,它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局 ...

  8. js前端 md5加密

    1.在utils目录下新建md5.js 在这里,我把md5()这个方法使用export进行了导出,方便在其他地方使用es6 import 引入使用 /* * JavaScript MD5 1.0.1 ...

  9. KingbaseES V8R3集群部署案例之---通用机无ssh环境脚本部署集群

    案例说明: 在一些通用机的生产环境,不允许主机之间通过ssh通讯,或者不允许root用户建立ssh互信或登录.默认KingbaseES V8R3集群通用机环境部署需要建立数据库用户及root用户,在集 ...

  10. Vue入门笔记三(Vuex)

    <Vue.js项目实战> Vuex 集中式的状态管理 Vuex从Flux(由Facebook开发)的概念中获取得灵感.Flux又一系列指导原则构成,阐明了如何使用集中式store来实现组件 ...