牛客网题库:https://www.nowcoder.com/practice/28eb3175488f4434a4a6207f6f484f47?tpId=295&tqId=732&sourceUrl=%2Fexam%2Foj

字符串BM84:

题目如下:

Python实现代码如下:

#
# @param strs string字符串一维数组
# @return string字符串
#
from typing import List


class Solution:
    def longestCommonPrefix(self , strs: List[str]) -> str:

        # 返回结果初始化为""
        res = ""
        # 字符串数组中每个字符串的长度
        lens = []

        # 处理特殊情况,字符串数组为空时,返回""
        if not strs:
            return ""

        # 获取字符串数组中每个字符串的长度
        for str in strs:
            lens.append(len(str))

        # 取字符串最小长度
        help_len = min(lens)
        # 最小长度小于1,即存在""字符串,则最长前缀为"",返回
        if help_len < 1:
            return ""

        # 循环次数最多为字符串的最小长度
        for i in range(help_len):
            # 取第一个字符串的的第i个位置的字符,后续字符串第i个位置的字符与其比较;
            # 1.如有不同,则该位置的字符不相同,循环结束,返回当前res的值;
            # 2.如果相同,res+当前位置的字符,继续往下一个位置比较
            # flag是辅助标志位,用于判断所有字符串第i个位置的字符是否相同
            tmp_str = strs[0][i]
            flag = True
            for str in strs:
                if str[i] != tmp_str:
                    flag = False
                    break

            if flag:
                res += tmp_str
            else:
                break

        return res


s = Solution()
print(s.longestCommonPrefix(["abca","abc","abca","abc","abcc"]))
print(s.longestCommonPrefix(["abc"]))
print(s.longestCommonPrefix(["abc", "", "ac"]))

解题思路:

        1、获取字符串数组中每个字符串的长度,取最小值help_len,公共前缀最长长度即为此最小值,故循环比较help_len次即可;

        2、循环过程:取第一个字符串的的第i个位置的字符,后续字符串第i个位置的字符与其比较;1.如有不同,则字符串该位置的字符不相同,循环结束,返回当前结果res的值;2.如果相同,res+当前位置的字符,继续往下一个位置比较;其中flag是辅助标志位,用于判断所有字符串第i个位置的字符是否相同;循环完成后,返回结果即可。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐