LeetCode 125 Valid Palindrome - Problem Statement

The problem

A phrase is a palindrome if, after converting all uppercase letters to lowercase and removing all non-alphanumeric characters, it reads the same forward and backward.

Given a string s, return true if it's a valid palindrome, or false otherwise.

For example, "A man, a plan, a canal: Panama" returns true. After cleaning it becomes "amanaplanacanalpanama" which reads the same both ways.

How can you check this without creating a new cleaned string?

Constraints: 1n2×1051 \le n \le 2 \times 10^5. Only printable ASCII characters.