Palindrome Program In Dart

In programming, a palindrome is a word, phrase, number, or other sequences of characters that reads the same forward and backward (ignoring spaces, punctuation, and capitalization). Examples include "madam", "racecar", and "12321". Understanding how to identify palindromes is important in various fields, including data validation, natural language processing, and algorithm design. You might use a palindrome check when developing features that involve user input validation or when working with text processing applications.

What is a Palindrome?

A palindrome is a sequence that remains unchanged when reversed. This concept can be applied to strings and numbers. For instance, when we reverse "12321", we get "12321" again, which confirms its palindromic nature. Palindromes can be simple, like single words, or complex, like phrases that ignore punctuation and spaces. Recognizing palindromes is a common task in programming, particularly in string manipulation and data analysis.

Syntax

Example

// Function to check if a string is a palindrome
bool isPalindrome(String str) {
  // Normalize the string by removing spaces and converting to lowercase
  String normalizedStr = str.replaceAll(RegExp(r'\s+'), '').toLowerCase();
  
  // Compare the original string with its reverse
  return normalizedStr == normalizedStr.split('').reversed.join('');
}

How It Works

  1. Normalization: The string is cleaned up by removing spaces and converting all characters to lowercase. This ensures that the comparison is case-insensitive and ignores spaces.
  2. Reversal: The string is reversed using the split, reversed, and join methods.
  3. Comparison: The normalized string is compared with its reversed version. If they are equal, the string is a palindrome.
  4. Example 1: Basic Usage

    Example
    
    void main() {
      String word = "madam"; // Assigning a word to check
      bool result = isPalindrome(word); // Calling the function to check if it's a palindrome
      print("$word is palindrome: $result"); // Printing the result
    }
    
    // Function to check if a string is a palindrome
    bool isPalindrome(String str) {
      String normalizedStr = str.replaceAll(RegExp(r'\s+'), '').toLowerCase();
      return normalizedStr == normalizedStr.split('').reversed.join('');
    }
    

Output:

Output

madam is palindrome: true

Explanation: The program checks if "madam" is a palindrome and confirms it by returning true.

Example 2: Intermediate Usage with Variations

Example

void main() {
  List<String> phrases = ["A man a plan a canal Panama", "Not a palindrome", "Was it a car or a cat I saw?"];
  
  for (String phrase in phrases) { // Loop through each phrase
    bool result = isPalindrome(phrase); // Check if each phrase is a palindrome
    print("\"$phrase\" is palindrome: $result"); // Print the result for each phrase
  }
}

// Function to check if a string is a palindrome
bool isPalindrome(String str) {
  String normalizedStr = str.replaceAll(RegExp(r'[\s,?.!]+', ''))
                            .toLowerCase(); // Remove punctuation too
  return normalizedStr == normalizedStr.split('').reversed.join('');
}

Output:

Output

"A man a plan a canal Panama" is palindrome: true
"Not a palindrome" is palindrome: false
"Was it a car or a cat I saw?" is palindrome: true

Explanation: This example checks multiple phrases, accounting for punctuation and spaces, and identifies which are palindromes.

Example 3: Real-World Application

Example

void main() {
  String userInput = "12321"; // Simulating user input
  if (isPalindrome(userInput)) { // Checking if the user input is a palindrome
    print("The number $userInput is a palindrome."); // Informing the user
  } else {
    print("The number $userInput is not a palindrome."); // Informing the user
  }
}

// Function to check if a string is a palindrome
bool isPalindrome(String str) {
  String normalizedStr = str.replaceAll(RegExp(r'\s+'), '').toLowerCase();
  return normalizedStr == normalizedStr.split('').reversed.join('');
}

Output:

Output

The number 12321 is a palindrome.

Explanation: In a user input scenario, the program checks if the number entered by the user is a palindrome.

Example 4: Edge Cases or Special Scenarios

Example

void main() {
  List<String> edgeCases = ["", " ", "A", "aa", "ab"];
  
  for (String edgeCase in edgeCases) { // Loop through edge cases
    bool result = isPalindrome(edgeCase); // Check if each case is a palindrome
    print("\"$edgeCase\" is palindrome: $result"); // Print the result
  }
}

// Function to check if a string is a palindrome
bool isPalindrome(String str) {
  String normalizedStr = str.replaceAll(RegExp(r'\s+'), '').toLowerCase();
  return normalizedStr == normalizedStr.split('').reversed.join('');
}

Output:

Output

"" is palindrome: true
" " is palindrome: true
"A" is palindrome: true
"aa" is palindrome: true
"ab" is palindrome: false

Explanation: This example handles edge cases such as empty strings and single characters, confirming they are palindromes.

Example 5: Advanced Usage

Example

void main() {
  String complexInput = "No lemon, no melon"; // A complex palindrome
  bool result = isPalindrome(complexInput); // Check if it is a palindrome
  print("Complex input \"$complexInput\" is palindrome: $result"); // Print the result
}

// Function to check if a string is a palindrome
bool isPalindrome(String str) {
  String normalizedStr = str.replaceAll(RegExp(r'[\s,?.!]+', ''))
                            .toLowerCase(); // Remove punctuation too
  return normalizedStr == normalizedStr.split('').reversed.join('');
}

Output:

Output

Complex input "No lemon, no melon" is palindrome: true

Explanation: The program checks a more complex sentence that includes punctuation and spaces and correctly identifies it as a palindrome.

When to Use Palindrome Program in Dart

Topic Description
Scenario 1 Validating user input in forms, where you need to check for palindromic strings.
Scenario 2 In games or applications that require palindrome checks, such as word puzzles.
Scenario 3 When processing text data, such as in natural language processing tasks to find palindromic patterns.

Key Points

Topic Description
Definition A palindrome reads the same forwards and backwards.
Normalization It is crucial to clean the string by removing spaces and punctuation for accurate checks.
Reversal Logic Using Dart's built-in methods makes it easy to reverse strings.
Versatility The palindrome check can be applied to both strings and numbers.
Edge Cases Single characters and empty strings are considered palindromes.
Real-World Application Useful in validating inputs and processing text data in various applications.

This tutorial provides a comprehensive understanding of palindrome detection in Dart, complete with practical examples and scenarios where it can be applied effectively.

Input Required

This code uses input(). Please provide values below: