#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# author: bigfoolliu


"""
编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀，返回空字符串 ""。

 

示例 1：

输入：strs = ["flower","flow","flight"]
输出："fl"
示例 2：

输入：strs = ["dog","racecar","car"]
输出：""
解释：输入不存在公共前缀。
 

提示：

1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

思路：利用充分利用Python zip函数，以及元组，集合的特性
"""

import doctest
from typing import List


class Solution:
    """
    >>> s = Solution()
    >>> s.longestCommonPrefix(['flower', 'flow', 'flight'])
    'fl'
    >>> s.longestCommonPrefix(['dog', 'racecar', 'car'])
    ''
    """

    def longestCommonPrefix(self, strs: List[str]) -> str:
        """
        :param: List(str)
        return: str
        寻找字符串的最长公共段
        """
        prefix = ''
        # zip打包列表的时候会打包成元组，且只会打包到最短的元素
        for common_tuple in zip(*strs):  # ("f", "f") ("l", "w")
            if len(set(common_tuple)) > 1:  # 大于1说明该位置的元素有不同
                break
            prefix += common_tuple[0]
        return prefix


if __name__ == '__main__':
    doctest.testmod()

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# author: bigfoolliu


"""
编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀，返回空字符串 ""。

 

示例 1：

输入：strs = ["flower","flow","flight"]
输出："fl"
示例 2：

输入：strs = ["dog","racecar","car"]
输出：""
解释：输入不存在公共前缀。
 

提示：

1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

思路：利用充分利用Python zip函数，以及元组，集合的特性
"""

import doctest
from typing import List


class Solution:
    """
    >>> s = Solution()
    >>> s.longestCommonPrefix(['flower', 'flow', 'flight'])
    'fl'
    >>> s.longestCommonPrefix(['dog', 'racecar', 'car'])
    ''
    """

    def longestCommonPrefix(self, strs: List[str]) -> str:
        """
        :param: List(str)
        return: str
        寻找字符串的最长公共段
        """
        prefix = ''
        # zip打包列表的时候会打包成元组，且只会打包到最短的元素
        for common_tuple in zip(*strs):  # ("f", "f") ("l", "w")
            if len(set(common_tuple)) > 1:  # 大于1说明该位置的元素有不同
                break
            prefix += common_tuple[0]
        return prefix


if __name__ == '__main__':
    doctest.testmod()

#!/usr/bin/env python3 # -*- coding:utf-8 -*- # author: bigfoolliu 编写一个函数来查找字符串数组中的最长公共前缀。  如果不存在公共前缀，返回空字符串 ""。     示例 1：  输入：strs = ["flower","flow","flight"] 输出："fl" 示例 2：  输入：strs = ["dog","racecar","car"] 输出："" 解释：输入不存在公共前缀。    提示：  1 <= strs.length <= 200 0 <= strs[i].length <= 200 strs[i] 仅由小写英文字母组成  来源：力扣（LeetCode） 链接：https://leetcode-cn.com/problems/longest-common-prefix 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。  思路：利用充分利用Python zip函数，以及元组，集合的特性 >>> s = Solution()     >>> s.longestCommonPrefix(['flower', 'flow', 'flight'])     'fl'     >>> s.longestCommonPrefix(['dog', 'racecar', 'car'])     '' :param: List(str)         return: str         寻找字符串的最长公共段 # zip打包列表的时候会打包成元组，且只会打包到最短的元素 # ("f", "f") ("l", "w") # 大于1说明该位置的元素有不同