Самая длинная строка общего префикса
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));
}
}