14 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 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/problems/longest-common-prefix
解决方案:
提供思路
没有100%的快慢,在不同的应用场景下可以有相应的思路。此题的思路比较清晰,两两比较前缀相同的字符串即可,但是可以优化的地方不少,比如:
1.如果字符串的长度各异,直接比较最大和最小的字符串即可
2.如果碰到2个的头部就不同,直接pass
不过终归的思路还是循环。上代码:
public class Solution {
public string LongestCommonPrefix(string[] strs) {
string result_str = null; //公共前缀
int count = 0; //公共前缀字母数
//每个单词的第 j 个字母
for(int j = 0;;j++)
{
//strs[]的第 i 个单词
for(int i = 0; i < strs.Length; i++)
{
//这一句用来应付类似的这种情况{ "at", "attach", "attitude" }
if(j > strs[i].Length - 1) return result_str = strs[0].Substring(0, j);
}
//strs[]的第 i 个单词
for(int i = 0; i < strs.Length - 1; i++)
{
//单词的第 j 个字母不相同
if(strs[i][j] != strs[i + 1][j])
{
if(j == 0) return ""; //如果第一个字母就不同,则无公共前缀
else return result_str; //不是第一个字母不同,则返回公共前缀
}
}
count++; //如果所有单词的第 j 个字母都相同,则公共前缀字母数加一
result_str = strs[0].Substring(0, count); //公共前缀赋值
}
}
}