📖 Scenario: You are building a simple program to check if a word is a palindrome. A palindrome is a word that reads the same forwards and backwards, like "level" or "radar".This is useful in games, puzzles, and text analysis.
🎯 Goal: Build a Rust program that checks if a given word is a palindrome by comparing characters from start to end.
📋 What You'll Learn
Create a variable with a specific word
Create a helper variable for the reversed word
Write logic to reverse the word
Compare the original and reversed word
Print whether the word is a palindrome or not
💡 Why This Matters
🌍 Real World
Palindrome detection is used in text processing, data validation, and puzzles to find symmetrical patterns in words or phrases.
💼 Career
Understanding string manipulation and condition checks is fundamental for software development, especially in data processing and algorithm design.
Progress0 / 4 steps
1
Create the word variable
Create a variable called word and set it to the string "racecar".
DSA Rust
Hint
Use let to create a variable and assign the string "racecar".
2
Create a reversed word variable
Create a variable called reversed and set it to an empty String.
DSA Rust
Hint
Use let mut to create a mutable string variable for building the reversed word.
3
Reverse the word using a loop
Use a for loop with variable ch to iterate over word.chars().rev() and push each character ch to reversed using push().
DSA Rust
Hint
Use word.chars().rev() to get characters in reverse order and add them to reversed.
4
Check palindrome and print result
Use an if statement to compare word and reversed. If they are equal, print "racecar is a palindrome". Otherwise, print "racecar is not a palindrome".
DSA Rust
Hint
Use if word == reversed to check equality and println! to print the result.
Practice
(1/5)
1. What does a palindrome string mean in simple terms?
easy
A. It has all unique characters
B. It contains only vowels
C. It is always an even length string
D. It reads the same forwards and backwards
Solution
Step 1: Understand palindrome definition
A palindrome is a word or phrase that reads the same from left to right and right to left.
Step 2: Check options against definition
Only It reads the same forwards and backwards matches this meaning exactly.
Final Answer:
It reads the same forwards and backwards -> Option D
Quick Check:
Palindrome = Same forwards and backwards [OK]
Hint: Palindrome means mirror reading same both ways [OK]
Common Mistakes:
Confusing palindrome with unique characters
Thinking palindrome must be even length
Assuming palindrome only has vowels
2. Which Rust code snippet correctly checks if a string s is a palindrome?
easy
A. s.reverse() == s
B. s.chars().eq(s.chars().rev())
C. s == s.reverse()
D. s.chars().all(|c| c == s.chars().next().unwrap())
Solution
Step 1: Understand Rust string palindrome check
To check palindrome, compare characters iterator with its reverse iterator.
Step 2: Analyze options
s.chars().eq(s.chars().rev()) uses chars().eq(chars().rev()) which correctly compares forward and backward characters. Options A and C use invalid methods or wrong comparisons. s.chars().all(|c| c == s.chars().next().unwrap()) checks if all characters are same, not palindrome.
Final Answer:
s.chars().eq(s.chars().rev()) -> Option B
Quick Check:
Compare chars iterator with reversed iterator [OK]
Hint: Use chars().eq(chars().rev()) to check palindrome [OK]
Common Mistakes:
Using reverse() method on &str which does not exist
Comparing string with reversed string incorrectly
Checking all chars equal instead of palindrome
3. What is the output of this Rust code?
let s = "racecar";
let result = s.chars().eq(s.chars().rev());
println!("{}", result);
medium
A. true
B. Runtime panic
C. Compilation error
D. false
Solution
Step 1: Analyze the string and palindrome check
The string "racecar" reads the same forwards and backwards, so it is a palindrome.
Step 2: Understand the code output
The code compares characters forward and backward and returns true for palindrome strings. So, it prints true.
Final Answer:
true -> Option A
Quick Check:
"racecar" palindrome check = true [OK]
Hint: Check if string equals its reverse chars [OK]
Common Mistakes:
Assuming palindrome check returns false for odd length
Thinking code causes compile or runtime error
Confusing output with string itself
4. Identify the error in this Rust palindrome check code:
fn is_palindrome(s: &str) -> bool {
s == s.chars().rev().collect::<String>()
}
medium
A. Cannot compare &str with String directly
B. Missing semicolon after collect
C. chars().rev() does not exist
D. Function return type should be String
Solution
Step 1: Understand types in comparison
The left side is &str, right side is String from collect(). Direct comparison between &str and String is not allowed.
Step 2: Fix type mismatch
Convert left side to String or right side to &str for comparison. For example, use s.to_string() == s.chars().rev().collect::<String>().
Final Answer:
Cannot compare &str with String directly -> Option A
Quick Check:
Type mismatch in comparison causes error [OK]
Hint: Compare same types: &str vs &str or String vs String [OK]
5. You want to detect palindromes ignoring case and spaces in Rust. Which code snippet correctly implements this?
hard
A. let is_pal = s.chars().all(|c| c.is_alphanumeric());
B. let lower = s.to_lowercase();
let is_pal = lower == lower.reverse();
C. let filtered: String = s.chars().filter(|c| !c.is_whitespace()).collect();
let lower = filtered.to_lowercase();
let is_pal = lower.chars().eq(lower.chars().rev());
D. let filtered: String = s.chars().filter(|c| c.is_whitespace()).collect();
let is_pal = filtered == filtered.chars().rev().collect::<String>();
Solution
Step 1: Remove spaces and convert to lowercase
let filtered: String = s.chars().filter(|c| !c.is_whitespace()).collect();
let lower = filtered.to_lowercase();
let is_pal = lower.chars().eq(lower.chars().rev()); filters out whitespace, collects characters, then converts to lowercase string.
Step 2: Check palindrome on cleaned string
It compares characters forward and backward correctly on the cleaned lowercase string.
Final Answer:
let filtered: String = s.chars().filter(|c| !c.is_whitespace()).collect(); let lower = filtered.to_lowercase(); let is_pal = lower.chars().eq(lower.chars().rev()); -> Option C