HiveBrain v1.2.0
Get Started
← Back to all entries
patterncsharpMinor

Leetcode 125. Valid Palindrome

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
palindromeleetcodevalid125

Problem

Problem statement


Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.


For example,


"A man, a plan, a canal: Panama" is a palindrome.


"race a car" is not a palindrome.


Note:


Have you consider that the string might be empty? This is a good question to ask during an interview.


For the purpose of this problem, we define empty string as valid palindrome.

Introduction of algorithm

The implementation of the algorithm is to scan the string once from left to right to filter out non-alphanumeric characters first, and then check the string is valid palindrome ignoring cases. The reason I like the implementation is that the code has some simplicity, avoid mixing checking if it is alphanumeric character with two pointers techniques.

The C# code passes leetcode online judge.

```
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Leetcode125_IsPalindrome
{
class ValidPalindrome
{
/*
* Leetcode 125: Valid Palindrome
* https://leetcode.com/problems/valid-palindrome/?tab=Description
*/
static void Main(string[] args)
{
RunTestcases();
}

public static void RunTestcases()
{
Debug.Assert(IsPalindrome("Aa"));
Debug.Assert(IsPalindrome("Ab%Ba"));
Debug.Assert(IsPalindrome("B%1*1b"));
Debug.Assert(!IsPalindrome("B%a*1b"));
}

/*
* Given a string, determine if it is a palindrom, considering
* only alphanumeric characters and ignoring cases
* Time complexity:
* O(N)
*
* empty string is valid palindrome
*/
public static bool IsPalindrome(string rawString)
{
if (rawString == null || rawString.Length == 0)
{

Solution

Seems to me that creating stringWithCases is overhead you don't need compared to just skipping characters and process the actual string.

If you are going to create stringWithCases then why not create stringWithOutCases? isLowerCaseAlphabetic could do the conversion cheaply.

Context

StackExchange Code Review Q#157396, answer score: 3

Revisions (0)

No revisions yet.