Самая длинная строка общего префикса

Below is my recursive approach to finding the longest common prefix to a set of strings.

пакетная рекурсия;

public class LongestCommonPrefix {
    public static String longestCommonPrefix(String[] str) {
        String finalStr = longestCommonPrefixHelper(str,"");
        return finalStr;
    }
    public static String longestCommonPrefixHelper(String[] str,String prefix) {
        if(str.length==0) {
            return prefix;
        }
        System.out.println("Prefix is "+prefix);
        for(int i=0;i<str.length;i++) {
            if(str[i].equals("")) {
                return prefix;
            }
        }
        String ch = str[0].substring(0, 1);
        for(int i=0;i<str.length;i++) {
            if(!str[i].substring(0, 1).equals(ch)) {

                return prefix;
            }
            else if(str[i].length()>1)
                str[i] = str[i].substring(1, str[i].length());
            else
                str[i]="";
        }
        prefix= prefix+ch;
        longestCommonPrefixHelper(str, prefix);
        return prefix;
    }

    public static void display(String[] s) {
        for(int i=0;i<s.length;i++) {
            System.out.print(s[i]+" ");
        }
    }

    public static void main(String[] args) {
        String[] s = {"Sujit","Suhail","Suit","Susan"};

        System.out.println(longestCommonPrefix(s));
    }
}

По какой-то причине я не получаю правильный вывод. Случается, что есть небольшая вещь, которую я пропустил. Любая форма помощи очень ценится. заранее спасибо

1 ответ

Решение

Изменить это

prefix= prefix+ch;
longestCommonPrefixHelper(str, prefix);
return prefix;  

в

return longestCommonPrefixHelper(str, prefix+ch);

Вы забыли вызвать рекурсию

  public class LongestCommonPrefix {
        public static String longestCommonPrefix(String[] str) {
            String finalStr = longestCommonPrefixHelper(str,"");
            return finalStr;
        }
        public static String longestCommonPrefixHelper(String[] str,String prefix) {
            if(str.length==0) {
                return prefix;
            }


            for(int i=0;i<str.length;i++) {
                if(str[i].equals("")) {
                    return prefix;
                }
            }

            String ch = str[0].substring(0, 1);
            for(int i=0;i<str.length;i++) {
                if(!str[i].substring(0, 1).equals(ch)) {
                    return prefix;
                }
                else if(str[i].length()>1)
                    str[i] = str[i].substring(1, str[i].length());
                else
                    str[i]="";
            }

            return longestCommonPrefixHelper(str, prefix+ch);
        }

        public static void display(String[] s) {
            for(int i=0;i<s.length;i++) {
                System.out.print(s[i]+" ");
            }
        }

        public static void main(String[] args) {
            String[] s = {"Sujit","Suhail","Suit","Susan"};

            System.out.println(longestCommonPrefix(s));
        }
    }
Другие вопросы по тегам