字符串中超过 1 个字母的最长公共子序列
Longest common subsequence of more than 1 Letter in a string
我正在尝试使用 k
值在两个字符串中查找多个字母的 LCS。例如,如果
k = 3
s1 = "AAABBBCCCDDDEEE"
s2 = "AAACCCBBBDDDEEE"
那么LCS就是4
:"AAABBBDDDEEE"
或者"AAACCCDDDEEE"
,另一个例子是if
k = 2
s1 = "EEDDFFAABBCC"
s2 = "AACCDDEEBBFF"
那么 LCS 将是 2
:"EEBB"
、"EEFF"
、"DDFF"
、"DDBB"
、...等等。我将如何做到这一点,以便 table 的每个单元格中有多个字符,如果字符不相等,我将不得不使用排序,即 "EF" == "FE"
使用std::is_permutation
判断两个字符串是否包含相同的字符。要在每个“table 的单元格”中存储多个字符,请使用 std::string
.
如有任何关于 C++ 的问题,请转到 here。
编辑: 这是 substr 用法的演示:
std::string s{"AAABBBCCCDDD"};
std::cout << s.substr(3, 3) << std::endl; // BBB
std::vector<std::string> substr_table;
substr_table.reserve(4); // reserve space for elements
for(std::size_t i{}; i < s.size(); i += 3){ // break up s into four substrings
substr_table.push_back(s.substr(i, 3));
}
std::cout << "[ ";
std::copy(
substr_table.cbegin(),
substr_table.cend(),
std::ostream_iterator<std::string>(std::cout, ", ")
); // Print vector
std::cout << "]\n";
// OUTPUT: [ AAA, BBB, CCC, DDD,]
我正在尝试使用 k
值在两个字符串中查找多个字母的 LCS。例如,如果
k = 3
s1 = "AAABBBCCCDDDEEE"
s2 = "AAACCCBBBDDDEEE"
那么LCS就是4
:"AAABBBDDDEEE"
或者"AAACCCDDDEEE"
,另一个例子是if
k = 2
s1 = "EEDDFFAABBCC"
s2 = "AACCDDEEBBFF"
那么 LCS 将是 2
:"EEBB"
、"EEFF"
、"DDFF"
、"DDBB"
、...等等。我将如何做到这一点,以便 table 的每个单元格中有多个字符,如果字符不相等,我将不得不使用排序,即 "EF" == "FE"
使用std::is_permutation
判断两个字符串是否包含相同的字符。要在每个“table 的单元格”中存储多个字符,请使用 std::string
.
如有任何关于 C++ 的问题,请转到 here。
编辑: 这是 substr 用法的演示:
std::string s{"AAABBBCCCDDD"};
std::cout << s.substr(3, 3) << std::endl; // BBB
std::vector<std::string> substr_table;
substr_table.reserve(4); // reserve space for elements
for(std::size_t i{}; i < s.size(); i += 3){ // break up s into four substrings
substr_table.push_back(s.substr(i, 3));
}
std::cout << "[ ";
std::copy(
substr_table.cbegin(),
substr_table.cend(),
std::ostream_iterator<std::string>(std::cout, ", ")
); // Print vector
std::cout << "]\n";
// OUTPUT: [ AAA, BBB, CCC, DDD,]