2015-08-31 3 views
0

Это часть задания, проверяющего похожие слова в двоичном дереве. Я слишком долго задерживался на этой ошибке, и был бы очень признателен за любую помощь в ее решении.Проблема со сравнением строк в двоичном дереве

  • Input: String "achiev"
  • Вывод: все строки, принятые [аз] achiev ИЛИ в [аз] Чиев ИЛИ ... ИЛИ achiev [AZ]

  • Проблема: алгоритм создает строку «достигать», но .compareTo() и .equals() указывают иначе.

    public class Problem { 
    
    static ArrayList<String> oneRedundantChar(String s) { 
    
    char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray(); 
    char[] arr = new char[(s.length()*2) + 1]; 
    char[] sarr = s.toCharArray(); 
    
    for (int i = 1; i < arr.length; i+= 2) { 
        arr[i] = sarr[(i-1)/2]; 
    } 
    char[] temp = arr.clone(); 
    
    ArrayList<String> reparr = new ArrayList<>(); 
    
    for (int i = 0; i < s.length()*2+1; i += 2) { 
        for (int j = 0; j < alphabet.length; j++) { 
         arr[i] = alphabet[j]; 
         reparr.add(String.valueOf(arr)); 
        } 
        arr = temp.clone(); 
    } 
    
    return reparr; 
    } 
    
    public static void main(String[] args) { 
        for (String s : oneRedundantChar("achiev")) { 
    
        System.out.println(s); 
    
        if (s.compareTo("achieve") == 0) { 
         System.out.println("Success"); 
        } 
        if(s.equals("achieve")) { 
         System.out.println("Success"); 
        } 
    
+0

Ваш подход выглядит болезненно неэффективным для меня. Вы слышали о расстоянии Левенштейна? –

ответ

0

Ваш «s» Строка разнесены (например, «а с ч е я v») и избыточный символ помещается где-то в пространстве. Таким образом, даже если генерируется «достижение», оно есть с пробелами («a c h i e ve»), которое, очевидно, не совпадает с терминами «равный» или «сравнивать» как слово «достичь». Когда вы помещаете сгенерированную строку в массив результатов (reparr.add(String.valueOf(arr));), вам нужно выбрать только непустые символы.

+0

Нет, вот пример. System.out.println ("GG" + s + "GG"); Выходы: GGachiesvGG GGachietvGG GGachieuvGG GGachievvGG GGachiewvGG GGachiexvGG GGachieyvGG GGachiezvGG GGachievaGG GGachievbGG GGachievcGG GGachievdGG GGachieveGG GGachievfGG – mortenkd

+1

Вы можете добавить печать s.length() к нему? Когда я запускаю System.out.println (s + "-" + s.length()); он всегда печатает длину 13. –

+0

Интересно. Я получаю те же результаты. Как это возможно, когда все пустоты должны быть обнаружены конкатенацией «GG» + s + «GG»? – mortenkd

Смежные вопросы