[Leedcode][JAVA][第125题][验证回文串][双指针][String]

【问题描述】[简单]

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

【解答思路】

1. 筛选 + 判断

在这里插入图片描述
时间复杂度:O(N) 空间复杂度:O(N)

 public boolean isPalindrome(String s) {StringBuffer sgood = new StringBuffer();int length = s.length();for (int i = 0; i < length; i++) {char ch = s.charAt(i);if (Character.isLetterOrDigit(ch)) {sgood.append(Character.toLowerCase(ch));}}StringBuffer sgood_rev = new StringBuffer(sgood).reverse();return sgood.toString().equals(sgood_rev.toString());}

在这里插入图片描述

class Solution {public boolean isPalindrome(String s) {StringBuffer sgood = new StringBuffer();int length = s.length();for (int i = 0; i < length; i++) {char ch = s.charAt(i);if (Character.isLetterOrDigit(ch)) {sgood.append(Character.toLowerCase(ch));}}int n = sgood.length();int left = 0, right = n - 1;while (left < right) {if (Character.toLowerCase(sgood.charAt(left)) != Character.toLowerCase(sgood.charAt(right))) {return false;}++left;--right;}return true;}
}
2.原字符串判断

在这里插入图片描述
时间复杂度:O(N) 空间复杂度:O(1)

class Solution {public boolean isPalindrome(String s) {int n = s.length();int left = 0, right = n - 1;while (left < right) {while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {++left;}while (left < right && !Character.isLetterOrDigit(s.charAt(right))) {--right;}if (left < right) {if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {return false;}++left;--right;}}return true;}
}
3. 手写库函数

时间复杂度:O(N) 空间复杂度:O(1)

class Solution {public boolean isPalindrome(String s) {int start = 0;int end = s.length() - 1;while (start < end) {while (start < end && !isLetterOrDigit(s.charAt(start))) start++;while (start < end && !isLetterOrDigit(s.charAt(end))) end--;if (toLowerCase(s.charAt(start)) != toLowerCase(s.charAt(end))) return false;start++;end--;}return true;}public boolean isLetterOrDigit(Character c) {if (('0' <= c && c <= '9') || ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')) {return true;}return false;}public Character toLowerCase(Character c) {if ('A' <= c && c <= 'Z') {return (char)(c + 32);}return c;}
}

【总结】

1.思路 单独拉出来 或者 原字符串上操作
2.Java String类

1 char charAt(int index)
返回指定索引处的 char 值。
2 int compareTo(Object o)
把这个字符串和另一个对象比较。
3 int compareTo(String anotherString)
按字典顺序比较两个字符串。
4 int compareToIgnoreCase(String str)
按字典顺序比较两个字符串,不考虑大小写。
5 String concat(String str)
将指定字符串连接到此字符串的结尾。
6 boolean contentEquals(StringBuffer sb)
当且仅当字符串与指定的StringButter有相同顺序的字符时候返回真。
7 static String copyValueOf(char[] data)
返回指定数组中表示该字符序列的 String。
8 static String copyValueOf(char[] data, int offset, int count)
返回指定数组中表示该字符序列的 String。
9 boolean endsWith(String suffix)
测试此字符串是否以指定的后缀结束。
10 boolean equals(Object anObject)
将此字符串与指定的对象比较。
11 boolean equalsIgnoreCase(String anotherString)
将此 String 与另一个 String 比较,不考虑大小写。
12 byte[] getBytes()
使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
13 byte[] getBytes(String charsetName)
使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
14 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此字符串复制到目标字符数组。
15 int hashCode()
返回此字符串的哈希码。
16 int indexOf(int ch)
返回指定字符在此字符串中第一次出现处的索引。
17 int indexOf(int ch, int fromIndex)
返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
18 int indexOf(String str)
返回指定子字符串在此字符串中第一次出现处的索引。
19 int indexOf(String str, int fromIndex)
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
20 String intern()
返回字符串对象的规范化表示形式。
21 int lastIndexOf(int ch)
返回指定字符在此字符串中最后一次出现处的索引。
22 int lastIndexOf(int ch, int fromIndex)
返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
23 int lastIndexOf(String str)
返回指定子字符串在此字符串中最右边出现处的索引。
24 int lastIndexOf(String str, int fromIndex)
返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
25 int length()
返回此字符串的长度。
26 boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。
27 boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
测试两个字符串区域是否相等。
28 boolean regionMatches(int toffset, String other, int ooffset, int len)
测试两个字符串区域是否相等。
29 String replace(char oldChar, char newChar)
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
30 String replaceAll(String regex, String replacement
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
31 String replaceFirst(String regex, String replacement)
使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
32 String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。
33 String[] split(String regex, int limit)
根据匹配给定的正则表达式来拆分此字符串。
34 boolean startsWith(String prefix)
测试此字符串是否以指定的前缀开始。
35 boolean startsWith(String prefix, int toffset)
测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
36 CharSequence subSequence(int beginIndex, int endIndex)
返回一个新的字符序列,它是此序列的一个子序列。
37 String substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。
38 String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。
39 char[] toCharArray()
将此字符串转换为一个新的字符数组。
40 String toLowerCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
41 String toLowerCase(Locale locale)
使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。
42 String toString()
返回此对象本身(它已经是一个字符串!)。
43 String toUpperCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
44 String toUpperCase(Locale locale)
使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。
45 String trim()
返回字符串的副本,忽略前导空白和尾部空白。
46 static String valueOf(primitive data type x)
返回给定data type类型x参数的字符串表示形式。

3. 边界条件要处理好 防止下标越界

转载:https://leetcode-cn.com/problems/valid-palindrome/solution/yan-zheng-hui-wen-chuan-by-leetcode-solution/

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

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

相关文章

面向对象之:继承

一&#xff1a;什么面向对象的继承&#xff1f; 比较官方的说法就是&#xff1a; 继承&#xff08;英语&#xff1a;inheritance&#xff09;是面向对象软件技术当中的一个概念。如果一个类别A“继承自”另一个类别B&#xff0c;就把这个A称为“B的子类别”&#xff0c;而…

7用Eclipse进行JSP开发

用Eclipse进行JSP开发 Eclipse简介和下载 Eclipse的发展 什么是Eclipse Eclipse下载 用Eclipse进行JSP开发 软件环境配置 安装JDK&#xff0c;配置Java运行环境 安装Tomcat服务器&#xff08;服务器能够正常启动和关闭&#xff09; 安装Eclipse JSP开发

求递归算法时间复杂度:递归树

引用自&#xff1a;http://www.cnblogs.com/wu8685/archive/2010/12/21/1912347.html 递归算法时间复杂度的计算方程式一个递归方程&#xff1a; 在引入递归树之前可以考虑一个例子&#xff1a; T(n) 2T(n/2) n2 迭代2次可以得&#xff1a; T(n) n2 2(2T(n/4) (n/2) 2) 还…

[Leetcode][JAVA]第[29]题[两数相除][二分法]

【问题描述】[中等] 给定两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去&#xff08;truncate&#xff09;其小数部分&#xff0c;…

8.用MyEclipse进行JSP开发

用MyEclipse进行JSP开发

Java学习笔记13-1——SpringMVC

文章目录1.什么是MVC回顾Servlet2.什么是SpringMVC概述中心控制器SpringMVC执行原理3.第一个SpringMVC 程序使用XML配置实现使用注解实现4.控制器和RestFul风格控制器Controller实现Controller接口使用注解ControllerRequestMappingRestFul 风格扩展&#xff1a;小黄鸭调试法5.…

端口占用怎么查找

D:\Users\hp\Documents\NetBeansProjects\WebApplication1\nbproject\build-impl.xml:1030: Deployment error: Starting of Tomcat failed, the server port 8080 is already in use. netstat -aon|findstr "8080" 查看端口 查看端口的进程 记住3306 tasklist|fi…

eclipse没有server怎么办

1打开eclipse 找到help 2点开&#xff0c;查找 Install new software 二步、然后在Work with中点击Add&#xff0c;如下图所示&#xff0c;加入Name"Kepler" repository&#xff1b;Locationhttp://download.eclipse.org/releases/kepler。 3填写完成后使用add 4第…

zabbix利用SNMPTrap接收交换机主动告警

zabbix接收trap的工作流程&#xff1a; snmptrapd 收到trapsnmptrapd将trap传递给SNMPTT或调用Perl接收器SNMPTT或Perl trap接收器解析&#xff0c;格式化并将trap写入文件Zabbix SNMP trap读取并解析trap文件对于每个trap&#xff0c;Zabbix发现主机接口与接收的trap地址匹配的…

eclipse安装jsp

1打开window中preferences 2找到server下runningtime 3add 4选择 5加入 6找到 7建立一个新jsp文件

The Apache Tomcat installation at this directory is version,tomcat

The Apache Tomcat installation at this directory is version,tomcat版本号过高eclipse无法导入解决办法 找到tomcat安装位置进入lib目录 lib目录下有个catalina.jar 用解压缩软件打开 打开后 在catalina.jar\org\apache\catalina\util目…

9.JSP运行原理与JSP页面的基本结构

JSP运行原理与JSP页面的基本结构 HTML页面的基本构成 .代码中出现的几种标签 •单标签 某些标签只需单独使用就能完整地表达意思&#xff0c;控制网页 效果&#xff0c;这类标签的语法是&#xff1a; <标签> 双标签 标签成对使用&#xff0c;由一个开始标签和一个结…

[Leedcode][JAVA][第124题][二叉树中的最大路径和][递归][二叉树]

【问题描述】[困难] 给定一个非空二叉树&#xff0c;返回其最大路径和。本题中&#xff0c;路径被定义为一条从树中任意节点出发&#xff0c;达到任意节点的序列。该路径至少包含一个节点&#xff0c;且不一定经过根节点。示例 1:输入: [1,2,3]1/ \2 3输出: 6 示例 2:输入: …

SAS对数据变量的处理

SAS对数据变量的处理 在使用DATA步基于已经存在的数据集生成新数据集时&#xff0c;可以指定在新数据集中不需要包含的变量而仅读取其他变量&#xff0c;或者指定仅需要在 新数据集中包含的变量。该功能可以通过DATA步中的SET语句和数据集选项KEEP和DROP来实现&#xff0c;也可…

[剑指offer][JAVA]面试题第[30]题[包含min函数的栈][双栈辅助栈][单栈]

【问题描述】[中等] 定义栈的数据结构&#xff0c;请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中&#xff0c;调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-…

12.多媒体和超链接标签及其应用实例

多媒体和超链接标签及其应用实例

[Leedcode][JAVA][面试题 16.18][模式匹配][字符串][枚举]

【问题描述】[中等] 你有两个字符串&#xff0c;即pattern和value。 pattern字符串由字母"a"和"b"组成&#xff0c;用于描述字符串中的模式。例如&#xff0c;字符串"catcatgocatgo"匹配模式"aabab"&#xff08;其中"cat"是…

CSS效果

效果属性 box-shadow/text-shadow/border-radius/background/clip-path box-shadow 图形阴影 <style type"text/css">.container{width: 50px;height:50px;background: red;box-shadow: 5px 5px 10px rgba(0,0,0,0.5)} </style> <body><div cla…