力扣125(java)-验证回文串(简单)
题目:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 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)-验证回文串(简单)的更多相关文章
- 力扣Leetcode 680. 验证回文字符串 Ⅱ
验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca ...
- Java实现 LeetCode 125 验证回文串
125. 验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, ...
- 力扣(LeetCode)验证回文串 个人题解
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...
- LeetCode:验证回文串【125】
LeetCode:验证回文串[125] 题目描述 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: ...
- 前端与算法 leetcode 125. 验证回文串
目录 # 前端与算法 leetcode 125. 验证回文串 题目描述 概要 提示 解析 解法一:api侠 解法二:双指针 算法 传入测试用例的运行结果 执行结果 GitHub仓库 查看更多 # 前端 ...
- leetcode125. 验证回文串 python 简单
125. 验证回文串 难度简单 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: &quo ...
- 力扣(LeetCode)125. 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...
- 力扣(LeetCode)验证回文串 个人题解(C++)
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...
- leetcode.字符串.125验证回文串-Java
1. 具体题目 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写.说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a pl ...
- 125. 验证回文串--LeetCode
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/valid-palindrome 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. ...
随机推荐
- 3、Azure Devops之Azure Repos篇
1.什么是Azure Repos Azure Repos,就是我们常说的代码仓库,相当于gitee,github,git,svn工具.主要是提供给开发人员使用的,管理.查看代码的部件.通过Files. ...
- 记录--怎么实现一个3d翻书效果
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 本篇主要讨论以下两种翻书动画的实现: 第一种是整页翻转的效果: 这种整页翻转的效果主要是做rotateY的动画,并结合一些CSS的3d属性 ...
- 从零开始的 dbt 入门教程 (dbt cloud 自动化篇)
一.引 在前面的几篇文章中,我们从 dbt core 聊到了 dbt 项目工程化,我相信前几篇文章足够各位数据开发师从零快速入门 dbt 开发,那么到现在我们更迫切需要解决的是如何让数据更新做到定时化 ...
- 【Docker】Dockerfile基础知识,相信你一定有所收获
Dockerfile常用命令 FROM: 继承基础镜像 MAINTAINER:镜像制作作者信息 RUN: 用来执行shell命令 EXPOSE: 暴露端口号 CMD: 启动容器默认执行的命令,会被覆盖 ...
- Spring框架之IoC( Inversion of Control )基础知识入门
1.IoC创建对象的方式 使用无参构造创建对象 假如要使用有参构造创建: 下标赋值constructor-arg <!--有参--> <bean id="User" ...
- #线段树#CF438D The Child and Sequence
题目 支持区间求和,区间取模,单点修改 分析 首先区间取模一直不停取模最多log次是有效的, 所以处理区间最大值,若区间最大值小于模数直接退出,否则暴力修改 时间复杂度\(O(mlog^2n)\) 代 ...
- OpenHarmony 3.2 Beta1版本正式发布
5 月 31 日,开放原子开源基金会正式发布 OpenAtom OpenHarmony(以下简称"OpenHarmony")3.2 Beta1 版本. 全球开发者可通过Gite ...
- Qt通过UDP发送广播
// x.h QUdpSocket* udp = nullptr; // UDP对象 void createUdpAndSendData(); // 创建UDP对象和发送广播数据 void dropU ...
- tkinter属性--转载Tynam Yang
一.主要控件 1.Button 按钮.类似标签,但提供额外的功能,例如鼠标掠过.按下.释放以及键盘操作事件 2.Canvas 画布.提供绘图功能(直线.椭圆.多边形.矩形) 可以包含图形或位图 3.C ...
- 编程小白也能快速掌握的ArkUI JS组件开发
原文:https://mp.weixin.qq.com/s/ByxCMvtxaNuKI_6cXgtLBg,点击链接查看更多技术内容. Playground自上线以来,得到了广大开发者的一致好评.特别是 ...