isPalindrome static method

bool isPalindrome(
  1. String string
)

Checks if string is Palindrome.

Implementation

static bool isPalindrome(String string) {
  // Remove diacritics (accents) for better UTF-8 support
  String withoutDiacritics = string
      .toLowerCase()
      .replaceAll(RegExp(r"\s+"), '')
      .replaceAll(RegExp(r"[^\p{L}\p{N}]+", unicode: true), "");

  // Map common accented characters to their base characters
  const accentMap = {
    'á': 'a',
    'à': 'a',
    'ã': 'a',
    'â': 'a',
    'ä': 'a',
    'é': 'e',
    'è': 'e',
    'ê': 'e',
    'ë': 'e',
    'í': 'i',
    'ì': 'i',
    'î': 'i',
    'ï': 'i',
    'ó': 'o',
    'ò': 'o',
    'õ': 'o',
    'ô': 'o',
    'ö': 'o',
    'ú': 'u',
    'ù': 'u',
    'û': 'u',
    'ü': 'u',
    'ç': 'c',
    'ñ': 'n',
  };

  for (final entry in accentMap.entries) {
    withoutDiacritics = withoutDiacritics.replaceAll(entry.key, entry.value);
  }

  for (var i = 0; i < withoutDiacritics.length; i++) {
    if (withoutDiacritics[i] !=
        withoutDiacritics[withoutDiacritics.length - i - 1]) {
      return false;
    }
  }

  return true;
}