Valid Palindrome — runnable Java
JavaUpdated
Runnable Java file — no imports, no Maven needed. Save it and run java ValidPalindrome.java.
/**
* LC-125 Valid Palindrome (Two-Pointer pattern)
*
* A phrase is a palindrome if, after lowercasing and removing all
* non-alphanumeric characters, it reads the same forward and backward.
*
* Standalone, pure-JDK file — no imports, no Maven needed.
*
* HOW TO RUN
* ----------
* In VS Code: open this file and click the ▶ Run button above main().
* In terminal: cd "C:\KDS\DSA Study\01-Two-Pointers"
* java ValidPalindrome.java
*/
public class ValidPalindrome {
/** Two pointers walk inward, skipping non-alphanumeric chars. O(n) time, O(1) space. */
static boolean isPalindrome(String s) {
int left = 0;
int right = s.length() - 1;
while (left < right) {
// skip anything that isn't a letter or digit
while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {
left++;
}
while (left < right && !Character.isLetterOrDigit(s.charAt(right))) {
right--;
}
if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {
return false;
}
left++;
right--;
}
return true;
}
public static void main(String[] args) {
// // a few test cases — expected results in the comment
// check("A man, a plan, a canal: Panama", true);
// check("race a car", false);
// check(" ", true);
// check("MADAM", false);
// check("Was it a car or a cat I saw?", true);
System.out.println("Sanjay started learing progarmmmin `");
}
private static void check(String input, boolean expected) {
boolean actual = isPalindrome(input);
String mark = (actual == expected) ? "PASS" : "FAIL";
System.out.println("[" + mark + "] isPalindrome(\"" + input + "\") = " + actual
+ " (expected " + expected + ")");
}
}