# 2108. Find First Palindromic String in the Array

## Description

Given an array of strings words, return the first palindromic string in the array. If there is no such string, return an empty string "".

A string is palindromic if it reads the same forward and backward.

Example 1:

Input: words = ["abc","car","ada","racecar","cool"]
Explanation: The first string that is palindromic is "ada".
Note that "racecar" is also palindromic, but it is not the first.


Example 2:

Input: words = ["notapalindrome","racecar"]
Output: "racecar"
Explanation: The first and only string that is palindromic is "racecar".


Example 3:

Input: words = ["def","ghi"]
Output: ""
Explanation: There are no palindromic strings, so the empty string is returned.


Constraints:

• 1 <= words.length <= 100
• 1 <= words[i].length <= 100
• words[i] consists only of lowercase English letters.

## Solutions

• class Solution {
public String firstPalindrome(String[] words) {
for (var w : words) {
boolean ok = true;
for (int i = 0, j = w.length() - 1; i < j && ok; ++i, --j) {
if (w.charAt(i) != w.charAt(j)) {
ok = false;
}
}
if (ok) {
return w;
}
}
return "";
}
}

• class Solution {
public:
string firstPalindrome(vector<string>& words) {
for (auto& w : words) {
bool ok = true;
for (int i = 0, j = w.size() - 1; i < j; ++i, --j) {
if (w[i] != w[j]) {
ok = false;
}
}
if (ok) {
return w;
}
}
return "";
}
};

• class Solution:
def firstPalindrome(self, words: List[str]) -> str:
return next((w for w in words if w == w[::-1]), "")


• func firstPalindrome(words []string) string {
for _, w := range words {
ok := true
for i, j := 0, len(w)-1; i < j && ok; i, j = i+1, j-1 {
if w[i] != w[j] {
ok = false
}
}
if ok {
return w
}
}
return ""
}

• function firstPalindrome(words: string[]): string {
for (const word of words) {
let left = 0;
let right = word.length - 1;
while (left < right) {
if (word[left] !== word[right]) {
break;
}
left++;
right--;
}
if (left >= right) {
return word;
}
}
return '';
}


• impl Solution {
pub fn first_palindrome(words: Vec<String>) -> String {
for word in words.iter() {
let s = word.as_bytes();
let mut left = 0;
let mut right = s.len() - 1;
while left < right {
if s[left] != s[right] {
break;
}
left += 1;
right -= 1;
}
if left >= right {
return word.clone();
}
}
String::new()
}
}