leetcode_字节跳动_挑战字符串_最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"] 输出: "fl"
示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
发现不知道手感和思路不够了还是什么,做题时总是漏掉一些重要的信息。
1. ["aa","a"],返回的是最小串a。
2.[ ] 无字符串数组返回“”。
思路:
1.遍历每一个字符串获得最小长度minlen,minlen就是最大可能符合的公共子串。
2.从0到minlen逐个字符串比较,遇到不相同的就直接退出,此时比较到的前n个字符就是最长公共前缀。
3.算法复杂度 O(minlen*strs.size())。
class Solution { public: string longestCommonPrefix(vector<string>& strs){ if(strs.size()==0) return ""; if(strs.size()==1) return strs[0]; int minlen=strs[0].length(); for(int i=0;i<strs.size();i++) minlen=minlen<strs[i].length()?minlen:strs[i].length(); cout<<minlen<<endl; int n=0; int flag=0;//判断是否相同 for(int i=0;i<minlen;i++){ for(int j=1;j<strs.size();j++){ if(strs[j][i]!=strs[j-1][i]){ flag=1;break; } } if(flag==1){ string res; res=strs[0].substr(0,n);//substr(int pos,int len) return res; } n++; } if(flag==0){ return strs[0].substr(0,minlen);//substr(int pos,int len) } return ""; } };
重新熟悉了substr函数的操作:
basic_string substr(size_type _Off = 0,size_type _Count = npos) const;
substr是C++语言函数,主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度。如果没有指定长度_Count或_Count+_Off超出了源字符串的长度,则子字符串将延续到源字符串的结尾。
在这题中直接返回子字符串。
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"] 输出: "fl"
示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
最好的开始时间是以前,其次是现在。