【算法】5956. 找出数组中的第一个回文字符串(多语言实现)

简介: 给你一个字符串数组 words ,找出并返回数组中的 第一个回文字符串 。如果不存在满足要求的字符串,返回一个 空字符串 "" 。回文字符串 的定义为:如果一个字符串正着读和反着读一样,那么该字符串就是一个 回文字符串 。

5956. 找出数组中的第一个回文字符串:

给你一个字符串数组 words ,找出并返回数组中的 第一个回文字符串 。如果不存在满足要求的字符串,返回一个 空字符串 ""

回文字符串 的定义为:如果一个字符串正着读和反着读一样,那么该字符串就是一个 回文字符串

样例 1:

输入:
    words = ["abc","car","ada","racecar","cool"]
    
输出:
    "ada"
    
解释:
    第一个回文字符串是 "ada" 。
    注意,"racecar" 也是回文字符串,但它不是第一个。

样例 2:

输入:
    words = ["notapalindrome","racecar"]
    
输出:
    "racecar"
    
解释:
    第一个也是唯一一个回文字符串是 "racecar" 。

样例 3:

输入:
    words = ["def","ghi"]
    
输出:
    ""
    
解释:
    不存在回文字符串,所以返回一个空字符串。

提示:

  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 100
  • words[i] 仅由小写英文字母组成

分析

  • 面对这道算法题目,我陷入了沉思。
  • 感觉就是遍历数组,然后遍历字符,判断是否回文,没什么可以大优化的地方。
  • 头尾双指针,判断字符是否相等,指针逐渐向中间重合。

题解

java

class Solution {
    public String firstPalindrome(String[] words) {
        for (String word : words) {
            int l = 0;
            int r = word.length() - 1;
            while (l < r
                    && word.charAt(l) == word.charAt(r)) {
                l++;
                r--;
            }
            if (l >= r) {
                return word;
            }
        }
        return "";
    }
}

c

char * firstPalindrome(char ** words, int wordsSize){
    for (int i = 0; i < wordsSize; ++i) {
        char* word = words[i];
        int l = 0;
        int r = strlen(word) - 1;
        while (l < r
               && word[l] == word[r]) {
            l++;
            r--;
        }
        if (l >= r) {
            return word;
        }
    }
    return "";
}

c++

class Solution {
public:
    string firstPalindrome(vector<string>& words) {
        for (string& word: words) {
            int l = 0;
            int r = word.size() - 1;
            while (l < r
                   && word[l] == word[r]) {
                l++;
                r--;
            }
            if (l >= r) {
                return word;
            }
        }
        return "";
    }
};

python

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

go

func firstPalindrome(words []string) string {
    for _, word := range words {
        l := 0
        r := len(word) - 1
        for l < r && word[l] == word[r] {
            l++
            r--
        }
        if l >= r {
            return word
        }
    }
    return ""
}

rust

impl Solution {
    pub fn first_palindrome(words: Vec<String>) -> String {
        for word in words.iter() {
            let bs = word.as_bytes();
            let mut l = 0;
            let mut r = word.len() - 1;
            while l < r && bs[l] == bs[r] {
                l += 1;
                r -= 1;
            }
            if l >= r {
                return word.clone();
            }
        }
        "".to_string()
    }
}

原题传送门:https://leetcode-cn.com/problems/find-first-palindromic-string-in-the-array/


非常感谢你阅读本文~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://developer.aliyun.com/profile/sqd6avc7qgj7y 博客原创~

相关文章
|
2月前
|
算法 测试技术
【算法】二分算法——寻找旋转排序数组中的最小值
【算法】二分算法——寻找旋转排序数组中的最小值
|
2月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
2天前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
10 0
|
2月前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
2月前
|
算法
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
|
2月前
|
算法
【算法】模拟算法——外观数组(medium)
【算法】模拟算法——外观数组(medium)
|
2月前
|
算法
【算法】前缀和——除自身以外数组的乘积
【算法】前缀和——除自身以外数组的乘积
|
2月前
|
算法
【算法】前缀和——寻找数组的中心下标
【算法】前缀和——寻找数组的中心下标
|
2月前
|
算法 Java 索引
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
31 0
|
2月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
22 0