コード例 #1
0
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;
}
コード例 #2
0
ファイル: zigzag.cpp プロジェクト: wpan9/algorithm
    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;
    }