isPalindrome static method
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;
}