From 4689e4e80b479be25f7557d05818f5caa723aafa Mon Sep 17 00:00:00 2001
From: 3gg <3gg@shellblade.net>
Date: Wed, 5 Feb 2025 18:36:31 -0800
Subject: Initial commit.

---
 .../easy/strings/05_valid_palindrome.cc            | 30 ++++++++++++++++++++++
 1 file changed, 30 insertions(+)
 create mode 100644 top-interview-questions/easy/strings/05_valid_palindrome.cc

(limited to 'top-interview-questions/easy/strings/05_valid_palindrome.cc')

diff --git a/top-interview-questions/easy/strings/05_valid_palindrome.cc b/top-interview-questions/easy/strings/05_valid_palindrome.cc
new file mode 100644
index 0000000..1b4ca6f
--- /dev/null
+++ b/top-interview-questions/easy/strings/05_valid_palindrome.cc
@@ -0,0 +1,30 @@
+class Solution {
+public:
+    bool IsAlphaNum(char c) {
+        return
+            (('a' <= c) && (c <= 'z')) ||
+            (('A' <= c) && (c <= 'Z')) ||
+            (('0' <= c) && (c <= '9'));
+    }
+
+    void Transform(string& s) {
+        size_t j = 0;
+        for (size_t i = 0; i < s.size(); ++i) {
+            if (IsAlphaNum(s[i])) {
+                s[j] = std::tolower(s[i]);
+                j++;
+            }
+        }
+        s.resize(j);
+    }
+
+    bool isPalindrome(string s) {
+        Transform(s);
+        for (size_t i = 0; i < s.size()/2; ++i) {
+            if (s[i] != s[s.size()-i-1]) {
+                return false;
+            }
+        }
+        return true;
+    }
+};
-- 
cgit v1.2.3