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"]
Output: "ada"
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#
Solution 1#
1
2
3
| class Solution:
def firstPalindrome(self, words: List[str]) -> str:
return next((w for w in words if w == w[::-1]), "")
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| 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 "";
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| 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 "";
}
};
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| 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 ""
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| 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 '';
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| 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()
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| char* firstPalindrome(char** words, int wordsSize) {
for (int i = 0; i < wordsSize; i++) {
int left = 0;
int right = strlen(words[i]) - 1;
while (left < right) {
if (words[i][left] != words[i][right]) {
break;
}
left++;
right--;
}
if (left >= right) {
return words[i];
}
}
return "";
}
|