Bird
Raised Fist0
DSA Goprogramming~20 mins

Valid Palindrome Two Pointer in DSA Go - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Palindrome Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of palindrome check with two pointers
What is the output of the following Go code that checks if a string is a palindrome ignoring non-alphanumeric characters and case?
DSA Go
package main
import (
	"fmt"
	"unicode"
)

func isPalindrome(s string) bool {
	left, right := 0, len(s)-1
	for left < right {
		if !unicode.IsLetter(rune(s[left])) && !unicode.IsDigit(rune(s[left])) {
			left++
			continue
		}
		if !unicode.IsLetter(rune(s[right])) && !unicode.IsDigit(rune(s[right])) {
			right--
			continue
		}
		if unicode.ToLower(rune(s[left])) != unicode.ToLower(rune(s[right])) {
			return false
		}
		left++
		right--
	}
	return true
}

func main() {
	fmt.Println(isPalindrome("A man, a plan, a canal: Panama"))
}
ACompilation error
Btrue
CRuntime panic
Dfalse
Attempts:
2 left
💡 Hint
Focus on how the two pointers skip non-alphanumeric characters and compare letters ignoring case.
❓ Predict Output
intermediate
2:00remaining
Result of palindrome check on non-palindrome string
What does the following Go code print when checking if "race a car" is a palindrome?
DSA Go
package main
import (
	"fmt"
	"unicode"
)

func isPalindrome(s string) bool {
	left, right := 0, len(s)-1
	for left < right {
		if !unicode.IsLetter(rune(s[left])) && !unicode.IsDigit(rune(s[left])) {
			left++
			continue
		}
		if !unicode.IsLetter(rune(s[right])) && !unicode.IsDigit(rune(s[right])) {
			right--
			continue
		}
		if unicode.ToLower(rune(s[left])) != unicode.ToLower(rune(s[right])) {
			return false
		}
		left++
		right--
	}
	return true
}

func main() {
	fmt.Println(isPalindrome("race a car"))
}
ACompilation error
Btrue
Cfalse
DRuntime panic
Attempts:
2 left
💡 Hint
Check the characters compared after skipping spaces.
🧠 Conceptual
advanced
2:00remaining
Why use two pointers for palindrome check?
Why is the two-pointer technique efficient for checking if a string is a palindrome ignoring non-alphanumeric characters and case?
AIt allows checking characters from both ends simultaneously, skipping irrelevant characters, reducing time complexity to O(n).
BIt sorts the string first, then compares characters, which is faster than direct comparison.
CIt uses recursion to compare characters, which is more memory efficient.
DIt converts the string to uppercase first, then compares characters sequentially.
Attempts:
2 left
💡 Hint
Think about how two pointers move and skip characters.
🔧 Debug
advanced
2:00remaining
Identify the bug in palindrome check code
What error will the following Go code produce when checking if "No lemon, no melon" is a palindrome?
DSA Go
package main
import (
	"fmt"
	"unicode"
)

func isPalindrome(s string) bool {
	left, right := 0, len(s)-1
	for left < right {
		if !unicode.IsLetter(rune(s[left])) {
			left++
			continue
		}
		if !unicode.IsLetter(rune(s[right])) {
			right--
			continue
		}
		if unicode.ToLower(rune(s[left])) != unicode.ToLower(rune(s[right])) {
			return false
		}
		left++
		right--
	}
	return true
}

func main() {
	fmt.Println(isPalindrome("No lemon, no melon"))
}
AIndex out of range runtime panic
Bfalse
Ctrue
DCompilation error
Attempts:
2 left
💡 Hint
Check what happens when the code encounters a comma or space on the right pointer.
🚀 Application
expert
3:00remaining
Count palindromic substrings using two pointers
Given a string, which approach correctly counts all palindromic substrings using the two-pointer technique?
AReverse the string and count matching prefixes and suffixes.
BSort the string and count repeated characters as palindromes.
CUse a stack to push characters and pop when matching characters are found.
DExpand around each character and each pair of characters as centers, using two pointers to check palindrome substrings.
Attempts:
2 left
💡 Hint
Think about how two pointers can expand outwards from centers to find palindromes.

Practice

(1/5)
1. What does the two-pointer technique check when verifying if a string is a palindrome?
easy
A. It compares characters from the start and end moving towards the center
B. It counts the number of vowels in the string
C. It reverses the string and compares with the original
D. It sorts the characters and checks if sorted equals original

Solution

  1. Step 1: Understand two-pointer approach

    The two-pointer technique uses two indexes: one at the start and one at the end of the string.
  2. Step 2: Compare characters moving inward

    It compares characters at these pointers and moves them towards the center to check if they match.
  3. Final Answer:

    It compares characters from the start and end moving towards the center -> Option A
  4. Quick Check:

    Two-pointer = compare start/end chars [OK]
Hint: Check characters from both ends moving inward [OK]
Common Mistakes:
  • Thinking it counts vowels instead of comparing characters
  • Assuming it reverses the string explicitly
  • Confusing sorting with palindrome check
2. Which of the following Go code snippets correctly initializes two pointers for a palindrome check on string s?
easy
A. left := len(s); right := 0
B. left := 1; right := len(s)
C. left := -1; right := len(s) + 1
D. left := 0; right := len(s) - 1

Solution

  1. Step 1: Identify valid pointer initialization

    For a string, the first character index is 0 and last is length minus 1.
  2. Step 2: Check each option

    left := 0; right := len(s) - 1 correctly sets left to 0 and right to len(s)-1, valid for two-pointer palindrome check.
  3. Final Answer:

    left := 0; right := len(s) - 1 -> Option D
  4. Quick Check:

    Start=0, End=len(s)-1 [OK]
Hint: Start left at 0 and right at len(s)-1 [OK]
Common Mistakes:
  • Starting left at 1 instead of 0
  • Setting right to len(s) which is out of range
  • Using negative or invalid indices
3. What will be the output of the following Go code?
func isPalindrome(s string) bool {
    left, right := 0, len(s)-1
    for left < right {
        if s[left] != s[right] {
            return false
        }
        left++
        right--
    }
    return true
}

fmt.Println(isPalindrome("racecar"))
fmt.Println(isPalindrome("hello"))
medium
A. true\nfalse
B. false\ntrue
C. true\ntrue
D. false\nfalse

Solution

  1. Step 1: Trace "racecar" input

    Characters at start and end match moving inward, so function returns true.
  2. Step 2: Trace "hello" input

    Characters 'h' and 'o' differ at first check, so function returns false.
  3. Final Answer:

    true\nfalse -> Option A
  4. Quick Check:

    "racecar" palindrome = true, "hello" not = false [OK]
Hint: Check first and last chars; mismatch means false [OK]
Common Mistakes:
  • Assuming "hello" is palindrome
  • Confusing return values order
  • Ignoring early return on mismatch
4. Identify the bug in this Go function that checks palindrome:
func isPalindrome(s string) bool {
    left, right := 0, len(s)
    for left < right {
        if s[left] != s[right] {
            return false
        }
        left++
        right--
    }
    return true
}
medium
A. left should start at 1, not 0
B. The loop condition should be left <= right
C. right should be initialized to len(s)-1, not len(s)
D. The function should return false at the end

Solution

  1. Step 1: Check pointer initialization

    right is set to len(s), which is out of string index range (0 to len(s)-1).
  2. Step 2: Correct initialization

    right should be len(s)-1 to point to last character correctly.
  3. Final Answer:

    right should be initialized to len(s)-1, not len(s) -> Option C
  4. Quick Check:

    Index out of range error fixed by right = len(s)-1 [OK]
Hint: Set right pointer to len(s)-1 to avoid index error [OK]
Common Mistakes:
  • Using len(s) as index causes runtime error
  • Changing left pointer start incorrectly
  • Misunderstanding loop condition
5. Given the string s = "A man, a plan, a canal: Panama", which modification to the two-pointer palindrome check is needed to correctly identify it as a palindrome?
hard
A. Reverse the string and compare directly
B. Ignore non-alphanumeric characters and compare case-insensitively
C. Only compare vowels in the string
D. Convert string to uppercase and compare characters directly

Solution

  1. Step 1: Understand input complexity

    The string contains spaces, commas, and mixed cases which should be ignored for palindrome check.
  2. Step 2: Modify two-pointer logic

    Skip non-alphanumeric characters and compare characters in lowercase to handle case differences.
  3. Final Answer:

    Ignore non-alphanumeric characters and compare case-insensitively -> Option B
  4. Quick Check:

    Clean and lowercase string before two-pointer check [OK]
Hint: Skip symbols and compare lowercase chars [OK]
Common Mistakes:
  • Not ignoring spaces and punctuation
  • Comparing case-sensitively causing false negatives
  • Only converting case without skipping symbols
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard