1. 题目
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
解释:“amanaplanacanalpanama” 是回文串
示例 2:
输入: “race a car”
输出: false
解释:“raceacar” 不是回文串
- 注意审题—字母和数字字符
2. 思路
双指针
func isPalindrome(_ s: String) -> Bool {
let nums: [String.Element] = ["0","1","2","3","4","5","6","7","8","9"]
// 这里是高阶语法
let tempArr: [String.Element] = Array(s.lowercased()).reduce(into: []) { partialResult, char in
if char >= "a" && char <= "z" || nums.contains(char) {
partialResult.append(char)
}
}
// print(tempArr)
var left = 0, right = tempArr.count - 1
while left <= right {
if tempArr[left] == tempArr[right] {
left += 1
right -= 1
} else {
return false
}
}
return true
}