Skip to content
DSA Grind
All 26 sections

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 + ")");
    }
}