Почему возвращается "НЕТ"? - PullRequest
0 голосов
/ 06 мая 2020

Я работаю с «Комплектом для подготовки к интервью HackerRank» и наткнулся на это решение от другого пользователя. Решение неверное, и HackerRank принимает его как «правильное», я хочу понять, почему.

// find if there is a common substring
string twoStrings(string s1, string s2)
{
    int n;
    int m;
    const char* char_array1;
    const char* char_array2;
    unordered_map<char, char> map;

    n = s1.size();
    m = s2.size();
    char_array1 = s1.c_str();
    char_array2 = s2.c_str();

    for (int i = 0; i < n - 1; i++)
        map[char_array1[i]] = char_array1[i + 1];

    for (int i = 0; i < m; i++)
        if (map[char_array2[i]] != 0)
            return "YES";

    return "NO";
}

Значения, которые я передаю:

beetroots & sandals

Код возвращает «НЕТ» "что неверно, так как 's' встречается в обоих словах.

1 Ответ

1 голос
/ 06 мая 2020

Почему это возвращает «НЕТ»?

Функция возвращает "NO", потому что первый l oop, который заполняет map, не учитывает последний символ s1 - поэтому непосредственно перед началом второго for map будет содержать записи для b, e, t, r и o:

map['b'] = 'e'
map['e'] = 't'
map['t'] = 's'
map['r'] = 'o'
map['o'] = 't'

Я подозреваю, что автор этого кода думал, что basic_string::size() возвращает количество элементов в базовом символьном массиве (т.е. включая нуль-терминатор \0), но на самом деле возвращает количество символов (ну, количество элементов, которые не обязательно являются символами в зависимости от используемой кодировки).

Сама функция полностью неверна, потому что она не выполняет никаких c логических операций, касающихся проверки общих подстрок - она ​​просто проверяет, есть ли какие-либо символ в s2 существует в s1 (кроме последнего символа s1).

Решение неверное, и HackerRank принимает его как «правильное», я хочу понять d почему.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...