int main() { for (size_t n = 0; n <= 20; ++n) { for (int i = 0; i < 1000; ++i) { std::string str = random_string(n); suffix_tree S(str); for (const std::string& substr : substrings(str)) { assert(S.find(substr) == find_occurrences(substr, str)); } /* search for random strings in str */ for (size_t m = 0; m <= n; ++m) { std::string rnd_str = random_string(m); assert(S.find(rnd_str) == find_occurrences(rnd_str, str)); } } std::cout << "passed random tests for strings of length " << n << std::endl; } return 0; }
string convert(string s, int numRows) { if (numRows <= 1) return s; // A string for each row vector<string> substrings(numRows); int rowIndex = 0; int delta = 1; for (int i = 0, n = s.size(); i < n; ++i) { substrings[rowIndex].push_back(s[i]); // flip delta if hitting the boundary. if (rowIndex == numRows - 1) { delta = -1; } else if (rowIndex == 0) { delta = 1; } rowIndex += delta; } string result; for (auto &ss : substrings) { result.append(ss); } return result; }