最长公共前缀

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

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

示例 1:

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

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

class Solution {
    public String longestCommonPrefix(String[] strs) {
if(strs.length==0)return "";//如果字符串为空则返回空
String ans=strs[0];//最长公共前缀ans为第一个字符串
for(int i=1;i<strs.length;i++){//对strs数组中的每个字符串遍历,与ans进行比较
    int j=0;//为了后面遍历每个字符串方便
    for(;j<strs[i].length()&&j<ans.length();j++){//对每个字符串进行遍历,但保证字符串长度不会大于ans的长度
        if(ans.charAt(j)!=strs[i].charAt(j))//判断此时第i个字符串中的第j个字符是否与ans的第j个字符相同,不同则说明前缀和前面字符串前缀不同,即不是公共前缀
        break;//如果不同则不需继续遍历,结束遍历第i个字符串
    }//继续遍历其他字符串
    ans=ans.substring(0,j);//将上面遍历得到的前j个和初始ans前j个相同的字符赋给ans
    if(ans.equals(""))
    return ans;//当循环发现ans为空时,返回空
}
return ans;
    }
}
class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        ans=""
        for i in list(zip(*strs))://把它们的字母按顺序做成一个集合,i相当于他每个集合的数组i[0]=[F,F,F],i[1]={l,l,l},i[2]={o,o,i}
            if len(set(i))==1://除去相同元素剩下的个数来判断他有几个字母相同,对于i[0]来说len(set(i))==1,里面元素相同,
                ans+=i[0]//把这个相同元素给ans
            else:
                break
        return ans

力扣中的习题,因为刚开始不会写,后来看其他大佬题解,加了一些自己的理解,前来做个笔记。

知识点:

1.java

ans.charAt(j)获取字符串ans 的位置为j的字符

如:"hello"charAt(0) 会返回字符串的第一个字符,即 "h"

ans.substring(0,j) 是Java中的字符串操作语句,用于获取字符串ans从索引0开始到索引j-1的子串。具体来说,substring(0, j)方法将提取ans字符串中从索引0开始(包括索引0)到索引j-1(不包括索引j)的子串。这意味着将返回一个新字符串,其中包含原始字符串中从第0个字符到第j-1个字符的所有字符。

例如,如果ans是字符串"Hello World",那么ans.substring(0, 5)将返回子串"Hello"

2.python

“list(zip(*strs))” 这段代码的含义是:将输入的字符串列表(strs)进行“解包”,然后用zip函数将解包后的字符串对应位置的元素打包成元组,最后用list函数将这些元组转换为列表。

  • *strs 这部分是解包操作。在Python中,使用*操作符可以将列表或元组的元素“解包”出来,变成一个个单独的变量。如果strs是一个字符串列表,例如 ['a', 'b', 'c'],那么 *strs 就相当于 'a', 'b', 'c'
  • zip(*strs) 这部分是打包操作。zip函数可以将多个可迭代的对象(如列表、元组等)中对应位置的元素打包成元组。所以 zip(*strs) 会将 'a', 'b', 'c' 打包成 ('a', 'b', 'c')

len(set(i)) 是一个Python表达式,其中set(i)创建一个包含i中所有唯一元素的集合,然后len()函数计算该集合的元素数量。

(1)set(i):这是一个将输入的可迭代对象(例如列表、元组等)转换为集合的操作。集合是一个无序且不包含重复元素的集合。例如,如果i是一个列表[1, 2, 2, 3, 4, 4, 4],那么set(i)将创建一个集合{1, 2, 3, 4}

(2)len():这是一个内置函数,用于返回可迭代对象的元素数量。例如,如果对象是一个列表或元组,那么len()将返回列表或元组的长度。

所以,len(set(i))将返回输入列表i中的唯一元素数量。如果i[1, 2, 2, 3, 4, 4, 4],那么len(set(i))将返回4,因为在这个列表中有4个不同的元素(1, 2, 3, 4)。

 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值