В этой статье блога мы углубимся в решение проблемы «Максимальное количество слов, найденных в предложениях» в 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++. Мы начали с наивного подхода, а затем использовали регулярные выражения и токенизацию. У каждого метода есть свои преимущества и ограничения, поэтому важно учитывать ограничения проблемы и выбирать наиболее подходящее решение.