КОЛИЧЕСТВО РАЗЛИЧНЫХ РЕЗУЛЬТИРУЮЩИХ СТРОК вопрос по литкоду

#c

Вопрос:

Вопрос: Международный код Морзе определяет стандартную кодировку, в которой каждая буква отображается в ряд точек и тире следующим образом: «a» соответствует «.-«, «b» соответствует «-…», «c» соответствует» -. -. » и так далее.

 For convenience, the full table for the 26 letters of the English alphabet is given below:
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
 

Теперь, учитывая список слов, каждое слово может быть записано как объединение азбуки Морзе каждой буквы. Например, «такси» может быть записано как «-.-..—…», (что такое конкатенация «-.-.» «.-» «-…»). Мы назовем такое объединение трансформацией слова.

Верните количество различных преобразований среди всех слов, которые у нас есть.Например:

 **Example:**
Input: words = ["gin", "zen", "gig", "msg"]
Output: 2
**Explanation:**
The transformation of each word is:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."
There are 2 different transformations, "--...-." and "--...--.".
 

Ответ, который я сделал:
я ошибаюсь в вводе, когда отправлял свой код в приведенном выше примере
Я получаю результат 4.
Но когда я отлажу, взяв вышеупомянутый onlinegdb.com , Я получаю правильный вывод, т. е. 2

     #include<string.h>

    int uniqueMorseRepresentations(char ** words, int wordsSize){
    int i=0,j,count=wordsSize;
    for(;i<wordsSize-1;i  )
    {
        if(words[i]!=NULL)
        {
             for(j=i 1;j<wordsSize;j  )
        {
            if(words[j]!=NULL)
            {
               if(strcmp(words[i],words[j])==0)
               {
                   count--;
               }
            }
        }
            words[i]=NULL;
        }
    }
    return count;
}
 

Комментарии:

1. Обратите внимание, что вы не сможете решить эту проблему, не ознакомившись со строками Азбуки Морзе. При взгляде только на буквы будут пропущены два совпадения во входных данных образца. Самое простое решение состоит в том, чтобы (1) сохранить полностью расширенную последовательность кода Морзе для каждой входной строки, а затем (2) искать дубликаты среди полностью расширенных дополнительных последовательностей кода. Для этого вам понадобятся несколько скретч-строк.

2. Если я использую strcmp() там, почему это не сработает? Большое спасибо! Не могли бы вы, пожалуйста, объяснить?

3. Посмотрите на два слова «джин» и «дзен». Они расширяются до одной и той же последовательности азбуки Морзе, верно? Итак, как вы могли бы определить это, не глядя на коды для каждой буквы? Вы должны знать код для каждой буквы, и вы должны использовать эту информацию. Без этого невозможно узнать, что «джин» и «дзен» — это одно и то же, верно? Все, что делает опубликованный код, — это ищет общие подстроки в конце «джин» и «дзен». Конечно, он может найти «n» в конце, но как он узнает, что «gi» и «ze» — это одно и то же?

4. Если бы эту проблему можно было решить, просто посмотрев на входные строки и проигнорировав таблицу азбуки Морзе, то это действительно не было бы проблемой с азбукой Морзе, не так ли? Дополнительная таблица кодов не должна вас смущать. Это происходит потому, что проблема не может быть решена без этого, как вы обнаруживаете.

5. Теперь я это понял. Большое спасибо

Ответ №1:

Возможно, вам также нужно учитывать время. Простой пример C# можно найти по адресу https://github.com/zizwiz/Convert-Text-to-Morse-and-Play-it Существует файл readme.pdf, который объясняет некоторые более глубокие детали.

Он использует следующие тайминги

 <summary>
Dot = 1 unit
Dash = 3 units

Between dots and dashes in letter = 1 unit
Between Chars = 3 units
Between words = 7 units
</summary>