Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <string>
- #include <iostream>
- #include <map>
- #include <algorithm>
- using namespace std;
- bool comparator(const string& first, const string& second)
- {
- if (first.size() > second.size())
- return true;
- else
- return false;
- }
- int main()
- {
- vector<string> words;
- vector<string> table;
- table.push_back("abdc");
- table.push_back("abd");
- table.push_back("aasdasdsabd");
- table.push_back("aasbdsdf");
- sort(table.begin(), table.end(), comparator);
- size_t maxSize = table[0].size();
- for (size_t wordSizeCounter = 0; wordSizeCounter < maxSize; wordSizeCounter++) // Здесь мы выбираем размера слова, которое будем составлять и, которое будем исктать
- {
- size_t currentSize = wordSizeCounter + 1; // Поскольу начинаем с нуля
- string wordWeSearch; // будущее слово
- for (size_t rowMakingIndex = 0; rowMakingIndex < table.size(); rowMakingIndex++) // номер строки, в которой будем выбирать слово, котрое будем искать
- {
- if (currentSize <= table[rowMakingIndex].size()) // Если размер слово, которое мы ходим создать для поиска НЕ БОЛЬШЕ, чем длина строки, в которой будем выбирать слово, то
- {
- for (size_t rightBorder = currentSize - 1; rightBorder < table[rowMakingIndex].size(); rightBorder++) // Мы выбираем i = размеру слова, и обрезаем слово с [i-размер] позиции, до [i]
- {
- wordWeSearch = table[rowMakingIndex].substr(rightBorder - currentSize + 1, currentSize); // Как раз вырезаем
- size_t counterOfCollisions = 1; // Если слово выбрали, то уже было одно повторение
- size_t rowWeMadeIn = rowMakingIndex; // Запомнили номер строки, из которой взяли слово, которое ищем
- bool isFind = true; // Для быстродействия
- for (size_t rowWeSearchingAt = 0; rowWeSearchingAt < table.size() && isFind; rowWeSearchingAt++) // Бегаем по всем строкам
- {
- if (rowWeSearchingAt != rowWeMadeIn) // Если это НЕ ряд, в котором мы взяли слово для поиска, то
- {
- if (table[rowWeSearchingAt].find(wordWeSearch) != string::npos) // Если мы находим слово в этом ряду
- {
- counterOfCollisions++; // Прибавляем количество коллизий
- if (counterOfCollisions > wordWeSearch.size()) // Если кол-во коллизий уже больше, чем размер нашего слова, то искать дальше смысла нет
- {
- isFind = false; // Завершаем поиск по строкам, ибо уже колллизий больше
- break;
- }
- }
- }
- }
- if (counterOfCollisions == wordWeSearch.size()) // Если количество коллизий по окончании поиска коллизий == размеру нашег ослова
- {
- bool alreadyInTheVocabulary = true; // То ищем его в векторе
- for (auto& it : words) // поиск
- if (it == wordWeSearch) // Если такой есть
- {
- alreadyInTheVocabulary = false; // то мы говорим об этом
- break;
- }
- if (alreadyInTheVocabulary) // Если по окончании, не нашлось, то добавляем
- words.push_back(wordWeSearch);
- }
- }
- }
- else
- {
- break;
- }
- }
- }
- for (auto& it : words)
- cout << "Word = " << it << " | Collisions = " << it.size() << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement