Взлом кода: максимальное количество слов в предложениях (LeetCode) – подробное руководство по C++

В этой статье блога мы углубимся в решение проблемы «Максимальное количество слов, найденных в предложениях» в LeetCode с использованием C++. Мы рассмотрим различные методы решения этой проблемы, предоставив примеры кода и подробное объяснение каждого подхода. Независимо от того, новичок вы или опытный программист, это руководство поможет вам понять проблему и найти наиболее эффективные решения.

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

int findMaxWords(string paragraph) {
    int maxWords = 0;
    stringstream ss(paragraph);
    string word;

    while (ss >> word) {
        int wordCount = countWords(word);
        maxWords = max(maxWords, wordCount);
    }

    return maxWords;
}
int countWords(string sentence) {
    int count = 0;
    stringstream ss(sentence);
    string word;

    while (ss >> word)
        count++;

    return count;
}

Метод 2: регулярные выражения
В этом методе мы будем использовать регулярные выражения для разделения абзаца на слова. Используя библиотеку regexв C++, мы можем определить шаблон, который соответствует словам, и подсчитать количество совпадений в каждом предложении.

#include <regex>
int findMaxWords(string paragraph) {
    int maxWords = 0;
    regex wordRegex("\\w+");
    smatch match;

    while (regex_search(paragraph, match, wordRegex)) {
        int wordCount = distance(match.begin(), match.end());
        maxWords = max(maxWords, wordCount);
        paragraph = match.suffix().str();
    }

    return maxWords;
}

Метод 3: токенизация
Здесь мы воспользуемся функцией strtokиз стандартной библиотеки C, чтобы преобразовать абзац в слова. Мы будем перебирать слова в каждом предложении, подсчитывая их и соответствующим образом обновляя максимальное количество.

#include <cstring>
int findMaxWords(string paragraph) {
    int maxWords = 0;
    char* cstr = new char[paragraph.length() + 1];
    strcpy(cstr, paragraph.c_str());

    char* token = strtok(cstr, " ");
    while (token != nullptr) {
        int wordCount = countWords(token);
        maxWords = max(maxWords, wordCount);
        token = strtok(nullptr, " ");
    }

    delete[] cstr;
    return maxWords;
}
int countWords(char* sentence) {
    int count = 0;
    char* token = strtok(sentence, " ");

    while (token != nullptr) {
        count++;
        token = strtok(nullptr, " ");
    }

    return count;
}

В этой статье мы рассмотрели несколько методов решения проблемы «Максимальное количество слов, найденных в предложениях» в LeetCode с использованием C++. Мы начали с наивного подхода, а затем использовали регулярные выражения и токенизацию. У каждого метода есть свои преимущества и ограничения, поэтому важно учитывать ограничения проблемы и выбирать наиболее подходящее решение.