Find First Symmetrical Landmark Name - codepath/compsci_guides GitHub Wiki
TIP102 Unit 3 Session 2 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 is the input to the problem?
- A: The input is an array of strings
landmarks
, where each string represents the name of a landmark.
- A: The input is an array of strings
- Q: What is the output?
- A: The output is the first landmark name in the array that is symmetrical (i.e., reads the same forward and backward). If no such name exists, return an empty string
"
.
- A: The output is the first landmark name in the array that is symmetrical (i.e., reads the same forward and backward). If no such name exists, return an empty string
- Q: How is a landmark name determined to be symmetrical?
- A: A landmark name is considered symmetrical if it reads the same forward and backward, which means it is a palindrome.
P-lan
Plan the solution with appropriate visualizations and pseudocode.
General Idea: Iterate through the array of landmark names and check each one to see if it is a palindrome. Return the first palindrome found, or return an empty string if no palindrome exists.
1. Define a helper function `is_palindrome(landmark)` that checks whether a given string is a palindrome:
1. Initialize two pointers, `left` at the start of the string and `right` at the end.
2. While `left` is less than `right`, compare the characters at these positions:
* If the characters are different, return `False`.
* If the characters are the same, move `left` one step to the right and `right` one step to the left.
3. If all characters match, return `True`.
2. Iterate through the `landmarks` array:
1. For each landmark, use `is_palindrome` to check if it is a palindrome.
2. If a palindrome is found, return that landmark.
3. If no palindrome is found after iterating through all landmarks, return an empty string `"`.
⚠️ Common Mistakes
- Forgetting to handle the case where no palindrome exists in the list, leading to incorrect results.
- Incorrectly implementing the palindrome check, such as not properly updating the pointers or comparing characters.
- Not considering edge cases, such as very short or empty landmark names.
I-mplement
def is_palindrome(landmark):
left, right = 0, len(landmark) - 1
while left < right:
if landmark[left] != landmark[right]:
return False
left += 1
right -= 1
return True
def first_symmetrical_landmark(landmarks):
for landmark in landmarks:
if is_palindrome(landmark):
return landmark
return ""
# Example usage
print(first_symmetrical_landmark(["canyon","forest","rotor","mountain"])) # Output: "rotor"
print(first_symmetrical_landmark(["plateau","valley","cliff"])) # Output: ""