编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
本来做这种题目的时候是不想用c#自己内嵌的类的方法的。但是这题如果不用的话会比较麻烦。要分析很多情况,如果是数组稍微好处理一些,但字符串就很难完全自己去写方法了。
我用的比较重要的方法是indexof(),主要功能是找到括号里的字符串在原字符串里的位置。
然后我们可以分析一下
1.首先我们随便让ans为某一个字符串(例如strs[0])
2.然后我们遍历字符串组,每一个字符串用indexof这个方法去查找ans。
3.如果每一个字符串查找到ans的位置都是0,即每一个字符串都存在相同的ans串。这时候就说明找到答案了。
4.如果存在某个字符串查不到ans(表现为查找出来的位置是-1)或者查到的位置在某个正数上(表现为查找出来的位置不是0)
那么这种情况下我们就可以让ans删去最后一个字母,长度减一。然后继续进行查找再转到2。
如果一直查找不到,直到ans的长度为零,输出空“”;
代码如下:
public class Solution
{
public string LongestCommonPrefix(string[] strs)
{
if (strs.Length == 0) return "";
string ans = strs[0]; //如果是strs[0]外的字符串,男下面遍历需要从0开始
for (int i = 1; i < strs.Length; i++)
{
while (strs[i].IndexOf(ans) != 0)
{
ans = ans.Substring(0, ans.Length - 1);
if (ans.Length==0) return "";
}
}
return ans;
}
}
但是时间和内存的表现不是很好。
不知道为什么,我简单难度的题目完成度比一般难度的完成度差好多。