Solution 1 - Two Pointers
Skip non-alphanumeric characters and compare lowercase characters from both ends.
Skip non-alphanumeric characters and compare lowercase characters from both ends.
""" 0125.1 - Valid Palindrome - Solution 1 - Two Pointers """
#####################################################################################
# Imports
#####################################################################################
#####################################################################################
# Classes
#####################################################################################
class Solution:
"""Solution Class"""
def isPalindrome(self, s: str) -> bool:
"""Valid Palindrome Function"""
a = [c.lower() for c in s if c.isalnum()]
return a == a[::-1]
#####################################################################################
# Functions
#####################################################################################
def testcase():
"""Test Function"""
print(Solution().isPalindrome("A man, a plan, a canal: Panama")) # True
print(Solution().isPalindrome("race a car")) # False
#####################################################################################
# Main
#####################################################################################
if __name__ == "__main__":
testcase()/** 0125.1 - Valid Palindrome - Solution 1 - Two Pointers */
/////////////////////////////////////////////////////////////////////////////////////
// Classes
/////////////////////////////////////////////////////////////////////////////////////
class Solution {
/** Valid Palindrome Function */
isPalindrome(s) {
const a = s.toLowerCase().replace(/[^a-z0-9]/g, "");
return a === a.split("").reverse().join("");
}
}
/////////////////////////////////////////////////////////////////////////////////////
// Functions
/////////////////////////////////////////////////////////////////////////////////////
function testcase() {
const solution = new Solution();
console.log(solution.isPalindrome("A man, a plan, a canal: Panama")); // true
console.log(solution.isPalindrome("race a car")); // false
}
/////////////////////////////////////////////////////////////////////////////////////
// Main
/////////////////////////////////////////////////////////////////////////////////////
testcase();/** 0125.1 - Valid Palindrome - Solution 1 - Two Pointers */
/////////////////////////////////////////////////////////////////////////////////////
// Classes
/////////////////////////////////////////////////////////////////////////////////////
class Solution {
/** Valid Palindrome Function */
isPalindrome(s: string): boolean {
const a: string = s.toLowerCase().replace(/[^a-z0-9]/g, "");
return a === a.split("").reverse().join("");
}
}
/////////////////////////////////////////////////////////////////////////////////////
// Functions
/////////////////////////////////////////////////////////////////////////////////////
function testcase(): void {
const solution = new Solution();
console.log(solution.isPalindrome("A man, a plan, a canal: Panama")); // true
console.log(solution.isPalindrome("race a car")); // false
}
/////////////////////////////////////////////////////////////////////////////////////
// Main
/////////////////////////////////////////////////////////////////////////////////////
testcase();// 0125.1 - Valid Palindrome - Solution 1 - Two Pointers
package main
/////////////////////////////////////////////////////////////////////////////////////
// Imports
/////////////////////////////////////////////////////////////////////////////////////
import (
"fmt"
"unicode"
)
/////////////////////////////////////////////////////////////////////////////////////
// Functions
/////////////////////////////////////////////////////////////////////////////////////
func isPalindrome(s string) bool {
runes := []rune{}
for _, c := range s {
if unicode.IsLetter(c) || unicode.IsDigit(c) {
runes = append(runes, unicode.ToLower(c))
}
}
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
if runes[i] != runes[j] {
return false
}
}
return true
}
func testcase() {
fmt.Println(isPalindrome("A man, a plan, a canal: Panama")) // true
fmt.Println(isPalindrome("race a car")) // false
}
/////////////////////////////////////////////////////////////////////////////////////
// Main
/////////////////////////////////////////////////////////////////////////////////////
func main() {
testcase()
}// 0125.1 - Valid Palindrome - Solution 1 - Two Pointers
/////////////////////////////////////////////////////////////////////////////////////
// Structs
/////////////////////////////////////////////////////////////////////////////////////
struct Solution;
/////////////////////////////////////////////////////////////////////////////////////
// Implementations
/////////////////////////////////////////////////////////////////////////////////////
impl Solution {
pub fn is_palindrome(s: String) -> bool {
let filtered: Vec<char> = s
.chars()
.filter(|c| c.is_alphanumeric())
.flat_map(|c| c.to_lowercase())
.collect();
filtered.iter().eq(filtered.iter().rev())
}
}
fn main() {
println!(
"{}",
Solution::is_palindrome("A man, a plan, a canal: Panama".to_string())
);
}