zoukankan      html  css  js  c++  java
  • Leecode刷题之旅-C语言/python-14.最长公共前缀

    /*
     * @lc app=leetcode.cn id=14 lang=c
     *
     * [14] 最长公共前缀
     *
     * https://leetcode-cn.com/problems/longest-common-prefix/description/
     *
     * algorithms
     * Easy (32.10%)
     * Total Accepted:    54.4K
     * Total Submissions: 169.3K
     * Testcase Example:  '["flower","flow","flight"]'
     *
     * 编写一个函数来查找字符串数组中的最长公共前缀。
     * 
     * 如果不存在公共前缀,返回空字符串 ""。
     * 
     * 示例 1:
     * 
     * 输入: ["flower","flow","flight"]
     * 输出: "fl"
     * 
     * 
     * 示例 2:
     * 
     * 输入: ["dog","racecar","car"]
     * 输出: ""
     * 解释: 输入不存在公共前缀。
     * 
     * 
     * 说明:
     * 
     * 所有输入只包含小写字母 a-z 。
     * 
     */
    
    char* longestCommonPrefix(char** strs, int strsSize) {
        if(strsSize == 0) {
            return "";
        }
        int index = 0, i = 0;
        char flag = strs[0][index];
        while(flag) {
            for(i = 1; i < strsSize; i++) {
                if(strs[i][index] != flag)
                    break;
            }
            if(i < strsSize)
                break;
            flag = strs[0][++index];
        }
        strs[0][index] = '';
        return strs[0];
    }

    这个函数有两个参数,一个是 strs指针的数字(可以理解为二维数组,行代表第n个字符串,列代表其中的第m个字符) strssize是字符串的个数(可以理解为这个二维数组的行数)

    如果长度是0的话,那么直接放回空 即 " "即可。

    然后flag为 第一个字符串中的第一个字符。循环条件是flag依旧存在。flag从第一个字符串的第一个字符循环到最后一位。

    在这个循环中嵌套一个循环,此循环为循环字符串,即第二个字符串,第三个。。第四个。。 比对的都是相同的位置的字符。

    如果出现了不相等的情况,就退出循环,如果此时的i小于字符串的个数,则说明 没有达到 公共前缀的要求 ,就退出整个大循环。

    循环外把 第一个字符串的每循环到的位置的字符变为终结符。

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    python:

    #
    # @lc app=leetcode.cn id=14 lang=python3
    #
    # [14] 最长公共前缀
    #
    # https://leetcode-cn.com/problems/longest-common-prefix/description/
    #
    # algorithms
    # Easy (32.10%)
    # Total Accepted:    54.4K
    # Total Submissions: 169.3K
    # Testcase Example:  '["flower","flow","flight"]'
    #
    # 编写一个函数来查找字符串数组中的最长公共前缀。
    # 
    # 如果不存在公共前缀,返回空字符串 ""。
    # 
    # 示例 1:
    # 
    # 输入: ["flower","flow","flight"]
    # 输出: "fl"
    # 
    # 
    # 示例 2:
    # 
    # 输入: ["dog","racecar","car"]
    # 输出: ""
    # 解释: 输入不存在公共前缀。
    # 
    # 
    # 说明:
    # 
    # 所有输入只包含小写字母 a-z 。
    # 
    #
    class Solution:
        def longestCommonPrefix(self, strs: List[str]) -> str:
            if len(strs)==0:
                return ''
            if len(strs)==1:
                return strs[0]
            a = min(strs)    #这里是ascii码的大小
            b = max(strs)
            for i in range(len(a)):
                if a[i]!=b[i]:
                    return a[:i]
            return a

    这里运用了一个知识,min 和 max是求字符的ascii码大小,找出ascii码最小的和最大的,然后进行逐个比较。

  • 相关阅读:
    栈和队列
    绪论
    抽象数据类型和python类
    《黑马程序员》流程控制(顺序结构,选择结构,循环结构)(C语言)
    《黑马程序员》C语言中的基本运算(C语言)
    《黑马程序员》C语言中的基本数据类型 (C语言)
    《黑马程序员》 关键字、标示符、注释(C语言)
    获取图片
    文件路径
    文件上传
  • 原文地址:https://www.cnblogs.com/lixiaoyao123/p/10491417.html
Copyright © 2011-2022 走看看