如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
示例 1:
输入: s = “A man, a plan, a canal: Panama”
输出:true
解释:“amanaplanacanalpanama” 是回文串。
示例 2:
输入:s = “race a car”
输出:false
解释:“raceacar” 不是回文串。
示例 3:
输入:s = " "
输出:true
解释:在移除非字母数字字符之后,s 是一个空字符串 “” 。
由于空字符串正着反着读都一样,所以是回文串。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-palindrome
package simple;
import java.util.*;
public class Solution125 {//验证回文串,1.遍历字符串,/**遇到大写字母,转化成小写,* 遇到非字符非字母,移除,* 维护一个新的数组,将满足条件的存到数组里,注意数组是可变数组* 在ascii码中,小写字母-大写字母=32* 0-9的ascii是48-57* */public static boolean isPalindrome(String s){int len=s.length();s=s.toLowerCase();//char []ans=new char[len];List ans=new ArrayList();int k=0;for(int i=0;iif(s.charAt(i)<='z'&&s.charAt(i)>='a'){ans.add(s.charAt(i));k++;}if(s.charAt(i)-'0'>=0&&s.charAt(i)-'0'<=9){ans.add(s.charAt(i));k++;//注意这里不要遗漏}}//判断数组是否是回文串,对称相等,最后一个数和第一个数是否相等int n=0,m=k-1;while(nif(ans.get(n)==ans.get(m)){n++;m--;}else{return false;}}return true;}public static void main(String[] args) {Scanner scan=new Scanner(System.in);String str=scan.nextLine();boolean result=isPalindrome(str);System.out.println(result);}
}