剑指 Offer II 018(Java). 有效的回文(简单)
题目:
给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。
本题中,将空字符串定义为有效的 回文串 。
示例 1:
输入: s = "A man, a plan, a canal: Panama"
输出: true
解释:"amanaplanacanalpanama" 是回文串
示例 2:
输入: s = "race a car"
输出: false
解释:"raceacar" 不是回文串
提示:
1 <= s.length <= 2 * 105
字符串 s 由 ASCII 字符组成
注意:本题与主站 125 题相同:
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
一、双指针(原串+双指针【不适用额外的空间】)
①先跳过非数字和非字母的字符
②再定义双指针left和right,从字符串的头和尾进行遍历,遍历过程中将字母统一转换为小写进行判断是否相同,不同直接返回false,遍历结束以后还没有返回,则说明是回文字符串,返回true。
1 class Solution {
2 public boolean isPalindrome(String s) {
3 int left = 0, right = s.length() - 1;
4 while (left < right){
5 while (left < right && !Character.isLetterOrDigit(s.charAt(left))){
6 left++;
7 }
8 while (left < right && !Character.isLetterOrDigit(s.charAt(right))){
9 right--;
10 }
11 if (left < right){
12 if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))){
13 return false;
14 }
15 left++;
16 right--;
17 }
18 }
19 return true;
20 }
21 }
复杂度:
时间复杂度:O(n),其中n 是字符串s 的长度。
空间复杂度:O(1)。
二、中心扩散法
①先去除多余字符,保留所有的字母和数字,同时保留的时候将大写字母转换为小写字母;
②从中心向两边扩散,注意字符个数奇偶数时,左右指针的位置,最后如果能够到达边界,说明是回文返回true,否则返回false。
1 class Solution {
2 public boolean isPalindrome(String s) {
3 StringBuilder sb = new StringBuilder();
4 for (int i = 0; i < s.length(); i++){
5 char ch = s.charAt(i);
6 if (Character.isLetterOrDigit(ch)){
7 sb.append(Character.toLowerCase(ch));
8 }
9 }
10 String ans = new String(sb);
11 int len = ans.length();
12 int left = 0, right = 0;
13 //字符串长度为偶数,则刚好对半分
14 //eg:abba
15 if (len % 2 == 0){
16 left = len/2 - 1;
17 right = len/2;
18 }else {
19 //eg:abcba
20 left = len/2 - 1;
21 right = len/2 + 1;
22 }
23 while (left >= 0 && right < len && ans.charAt(left) == ans.charAt(right)){
24 left--;
25 right++;
26 }
27 if (left == -1 && right == len){
28 return true;
29 }
30 return false;
31 }
32 }
剑指 Offer II 018(Java). 有效的回文(简单)的更多相关文章
- 剑指Offer——知识点储备-Java基础
剑指Offer--知识点储备-Java基础 网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&pa ...
- 剑指Offer——栈的java实现和栈的应用举例
剑指Offer--栈的java实现和栈的应用举例 栈是一种先进后出的数据结构, 栈的实现如下: 首先定义了栈需要实现的接口: public interface MyStack<T> { / ...
- 剑指offer题解(Java版)
剑指offer题解(Java版) 从尾到头打印链表 题目描述 输入一个链表,按从尾到头的顺序返回一个ArrayList. 方法1:用一个栈保存从头到尾访问链表的每个结点的值,然后按出栈顺序将各个值存入 ...
- 刷题-力扣-剑指 Offer II 055. 二叉搜索树迭代器
剑指 Offer II 055. 二叉搜索树迭代器 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kTOapQ 著作权归领扣网络所有 ...
- 【剑指 Offer II 001. 整数除法】同leedcode 29.两数相除
剑指 Offer II 001. 整数除法 解题思路 在计算的时候将负数转化为正数,对于32位整数而言,最小的正数是-2^31, 将其转化为正数是2^31,导致溢出.因此将正数转化为负数不会导致溢出. ...
- 剑指offer编程题Java实现——面试题5从头到尾打印链表
题目描述* 剑指offer面试题5:从尾到头打印链表 输入一个链表的头结点,从尾到头打印出每个结点的值 解决方案一:首先遍历链表的节点后打印,典型的"后进先出",可以使用栈来实现这 ...
- 剑指offer面试题-Java版-持续更新
最近在用Java刷剑指offer(第二版)的面试题.书中原题的代码采用C++编写,有些题的初衷是为了考察C++的指针.模板等特性,这些题使用Java编写有些不合适.但多数题还是考察通用的算法.数据结构 ...
- 剑指offer编程题Java实现——面试题10二进制中1的个数
题目: 请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数.例如,把9表示成二进制是1001,有2位是1,该函数输出2解法:把整数减一和原来的数做与运算,会把该整数二进制表示中的最低位的1变 ...
- 剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈
剑指offer面试题7相关题目:用两个队列实现一个栈 解题思路:根据栈的先入后出和队列的先入先出的特点1.在push的时候,把元素向非空的队列内添加2.在pop的时候,把不为空的队列中的size()- ...
- 剑指offer编程题Java实现——面试题7用两个栈实现队列
题目:用两个栈实现一个队列.队列的声明如下:请实现他的两个函数appendTail和deleteHead, 分别完成在队列尾部插入节点和在队列头部删除节点的功能. package Solution; ...
随机推荐
- mybatis之Mapped Statements collection does not contain value for...错误原因分析
错误原因有几种: 1.mapper.xml中没有加入namespace: 2.mapper.xml中的方法和接口mapper的方法不对应: 3.mapper.xml没有加入到mybatis-co ...
- STM32 启动代码分析
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- opencv-python笔记(1)
openCV笔记 图像 灰度图像 0代表纯黑色,255代表白色(类似亮度) 通道拆分 通过索引拆分: import cv2 lena=cv2.imread("lenacolor.png& ...
- (2)Python解释器的安装
鉴于有同学在安装Python解释器出现了问题,这里再安装一下 step1,下载安装包,链接https://www.python.org/downloads/ 这里我安装的是3.6.4版本 我选择的是6 ...
- 03.Java数据结构问题
目录介绍 3.0.0.1 在arrayList中System.arraycopy()和Arrays.copyOf()方法区别联系?System.arraycopy()和Arrays.copyOf()代 ...
- 记录--纯CSS实现一个简单又不失优雅的步骤条
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 步骤条是一种用于引导用户按照特定流程完成任务的导航条,在各种分步表单交互场景中广泛应用.先来看一下几个主流前端 UI 框架中步骤条组件的样 ...
- 利用kali自带的msfvenom工具生成远程控制软件
一.首先还是得打开postgresql service postgresql start 然后让我们看看它有哪些功能 部分参数 -p 选择一个载荷,或者说一个模块吧. -i 载荷列表 -f 生成的文件 ...
- multisim的支路及总线设计
Multisim的支路及总线设计 1.实验原理 最近在使用multisim设计时,用到了总线和支路设计,这里记录一下,方便以后查阅相关操作.其中主要是总线的使用和支路连接器的使用. 2.实验操作 (1 ...
- KingabseES kingbase_fdw 跨库关联查询
背景 我们在做综合应用项目的时候,通常会面临客户的每个应用系统使用各自的数据库,或者存放在不同的服务器.查询报表可能使用多个应用数据,这样就需要跨库读取数据表或视图. KINGBASE_FDW 是一种 ...
- scala入门输出hello world!
官网下载scala 2.12.11 版zip包,解压到自定义目录并配置环境变量.