阅读 96

leetcode 125. 验证回文串

题目描述

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

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

示例 1:

输入: "A man, a plan, a canal: Panama" 输出: true 解释:"amanaplanacanalpanama" 是回文串 复制代码

示例 2:

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

提示

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

题解

使用双指针从数组两端分别进行比较.判断指针所在的元素是否为数字或者字母,否则continue跳过并向中间移动一个位置.

通过Characters类的isDigit判断是否为数字.通过isLetterOrDigit 判断是否为数字或者字母.isLowerCase(char c) 方法转化为小写字母.

当判断通过时,将两个所指的全部转换成小写,然后进行比较

  • 如果不相等,立即返回false即可.

  • 相等,双指针向中间都移动一位

public static boolean isPalindrome(String s) {         int left = 0;         int right = s.length() -1;         char[] chars = s.toCharArray();         while (left < right) {         //判断是否为数字或者字母             if (!Character.isLetterOrDigit(chars[left])) {                 left++;                 // 跳过                 continue;             }             //判断是否为数字或者字母             if (!Character.isLetterOrDigit(chars[right])) {                 right --;                 // 跳过                 continue;             }             // 全部转换成小写             if (Character.toLowerCase(chars[left])==Character.toLowerCase(chars[right])) {                 left++;                 right--;             }else {             //当不相等时,立刻返回false                 return false;             }         }         return true;     } 复制代码

image.png


作者:顽疾
链接:https://juejin.cn/post/7018433113751552036


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐