讨论/技术交流/求救 14题 最长公共前缀 通不过 第二个示例给个 [] 就卡住了/
求救 14题 最长公共前缀 通不过 第二个示例给个 [] 就卡住了
class Solution
{
    //用来获取String数组中最短的数组
    public String shortestString(String[] strs)
    {
        String shortestString;
        if(strs==null)
            shortestString=new String("");
        else
            shortestString=new String(strs[0]);
        for(int i=1;i<strs.length;i++)
        {
            if(strs[i].length()<shortestString.length())
                shortestString=strs[i];
        }
        return shortestString;
    }

    public String longestCommonPrefix(String[] strs)
    {
        if(strs==null)
            return "";
        String shortestString=shortestString(strs);
        int compareLen=shortestString.length();
        for (int j = 0; j < strs.length; j++)
        {
            //把数组中最短的字符串与其他的比较,不是的就去掉最后一位字母,将新的字符串拿去跟数组中剩下的继续比较
            while(!strs[j].substring(0, compareLen).equals(shortestString))
            {
                compareLen--;
                shortestString = shortestString.substring(0, compareLen);

            }
        }
        return shortestString;
    }
}
class Test
{
    public static void main(String[] args)
    {
        String[] test={"apply","application","app","abstract"};

        Solution solution=new Solution();
        System.out.println(solution.longestCommonPrefix(test));
    }
}
共 4 个回复

可以先判断一下是否为空(大一新生编码弱望谅解)

1

class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string result;
int m=1;
if(strs.size()==0)
result="";
else{
for(int j=0;j!=strs[0].size();++j)
{
for(int i=1;i!=strs.size();++i)

        if(strs[0][j]!=strs[i][j])
        {
            m=0;
          break;
    }
    if(m)
    {
        result+=strs[0][j];
    }
    else break;
    

}}
return result;}

};

1

if(strs==null)改为if(strs.length == 0);
字符串对象String str= new String()与null的值不相等,且内存地址也不相等。

你这给的是C++吧
不过感谢你的回复 我已经找到问题了
我开始弄错了
Java中判断一个数组是否为空需要这样

if(strs.length<1)

而不是

if(strs==null)

从网上了解到Java的对象即使没有初始化也占有内存,所以一个空的String数组并不是null