Member 13277493 Ответов: 1

Мне нужен совет, чтобы решить эту проблему


/*Write either a C++ function int triplets(stack<string> words) or a Java method public static
 * int triplets(Stack<String> words) that take as the argument a stack of strings and count how
 * many elements are included in the stack exactly three times. You should use objects of type
 * set<string> in C++ or TreeSet<String> in Java. The set operations are given below (refer to
 * Problem 1 for the stack operations):
*/


#include <iostream>
#include <stack>
#include <set>
#include <string>
using namespace std;

string popped="";
int triplets(stack<string>words)
{
    set<string>set1{"wow", "AUA", "wow", "AUA", "Data  Structures", "AUA", "OOP", "wow"} ;
    for(const auto &count: set1)
    {
        words.push(count);

    }
    for(int i=0; i<words.size(); i++)
    {

        for(int current=i; current<words.size(); current++)
        {
            popped=words.top();

        }
    }

}


Что я уже пробовал:

Я попытался решить эту проблему с помощью очереди, сравнивая фронт с тылом, но это было сложнее/

Richard MacCutchan

Вы просто копируете свой исходный стек в новый, но не делаете с ним ничего полезного. Вам нужно создать несколько новых списков (стеков?) для каждого уникального слова. Как только вы разделите их, вы можете пересчитать их, чтобы увидеть, какой список содержит три записи. Кроме того, набор слов - это параметр, передаваемый в вашу функцию, поэтому вам не нужно его создавать,это должен делать вызывающий функцию.

Member 13277493

большое вам спасибо за ответ, но не могли бы вы объяснить, что вы имеете в виду, разделяя их? :)

1 Ответов

Рейтинг:
2

CPallini

Сначала вы можете вставить все строки стека в набор. Затем сделайте два вложенных цикла: во внешнем перебирайте элементы набора, во внутреннем - элементы стека, подсчитывая совпадения.