Check Symmetry in Post Titles - codepath/compsci_guides GitHub Wiki

TIP102 Unit 3 Session 1 Standard (Click for link to problem statements)

U-nderstand

Understand what the interviewer is asking for by using test cases and questions about the problem.

  • Q: What does it mean for a title to be symmetrical?
    • A: A title is symmetrical if it reads the same forwards and backwards when ignoring spaces, punctuation, and case.
  • Q: What should be ignored when checking for symmetry?
    • A: Spaces, punctuation, and case should be ignored.

P-lan

Plan the solution with appropriate visualizations and pseudocode.

General Idea: Use two pointers to compare characters from the beginning and end of the title while skipping non-alphanumeric characters and ignoring case.

1. Initialize two pointers, `left` at the start of the title and `right` at the end.
2. While `left` is less than `right`:
   1. Move `left` pointer to the right if the current character is not alphanumeric.
   2. Move `right` pointer to the left if the current character is not alphanumeric.
   3. Compare the characters at `left` and `right` (convert both to lowercase):
      1. If they don't match, return `False`.
      2. If they do match, move both pointers towards the center.
3. If all characters match, return `True`.

⚠️ Common Mistakes

  • Forgetting to skip non-alphanumeric characters.
  • Not converting characters to lowercase before comparison.
  • Not handling edge cases where the title is empty or contains only non-alphanumeric characters.

I-mplement

def is_symmetrical_title(title):
  left, right = 0, len(title) - 1

  while left < right:
    # Skip non-alphanumeric characters from the left
    while left < right and not title[left].isalnum():
      left += 1

    # Skip non-alphanumeric characters from the right
    while left < right and not title[right].isalnum():
      right -= 1

    # Compare characters (case-insensitive)
    if title[left].lower() != title[right].lower():
      return False

    left += 1
    right -= 1

  return True