LeetCode 125. Valid Palindrome (LaTeX)
12 Jun 2020Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
Example
Example 1:
Input: "A man, a plan, a canal: Panama"
Output: true
Example 2:
Input: "race a car"
Output: false
Notes
For the purpose of this problem, we define empty string as valid palindrome.
Solution
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{expl3}
\usepackage{datetime2}
\begin{document}
\ExplSyntaxOn
\cs_generate_variant:Nn \str_map_variable:nNn {VNn}
\cs_set:Npn \get_charcode:n #1 {
\int_eval:n {`#1}
}
\cs_set:Npn \valid_palindrome:n #1 {
\str_gset:Nn \g_tmpa_str {#1}
\str_gclear:N \g_tmpb_str
\str_map_variable:VNn \g_tmpa_str \l_tmpa_str {
\exp_args:NNx \int_set:Nn \l_tmpa_int { \exp_args:NV \get_charcode:n \l_tmpa_str }
\bool_if:nT {
\int_compare_p:n { 47 < \l_tmpa_int < 58 } ||
\int_compare_p:n { 64 < \l_tmpa_int < 91 } ||
\int_compare_p:n { 96 < \l_tmpa_int < 123 }
}
{\str_gput_right:Nx \g_tmpb_str {\tl_lower_case:n \l_tmpa_str}}
}
\par processed~string:~\cs_meaning:N \g_tmpb_str
\str_gset_eq:NN \g_tmpa_str \g_tmpb_str
\tl_reverse:N \g_tmpa_str
\par reversed~string:~\cs_meaning:N \g_tmpa_str
\str_if_eq:NNTF \g_tmpa_str \g_tmpb_str
{
\tl_gset:Nn \g_tmpa_tl {true}
} {
\tl_gset:Nn \g_tmpa_tl {false}
}
}
\newcommand{\validpalindrome}[1]{
\valid_palindrome:n {#1}
\par\textbf{result:~\tl_use:N \g_tmpa_tl}
}
\ExplSyntaxOff
\validpalindrome{A man, a plan, a canal: Panama}
\validpalindrome{hello}
\DTMNow
\end{document}
Output
processed string: macro:->amanaplanacanalpanama reversed string: macro:->amanaplanacanalpanama result: true processed string: macro:->hello reversed string: macro:->olleh result: false 2020-06-12 11:17:00-04:00