如果一个字符串可以通过从另一个字符串中删除0个或多个字符来形成,则该字符串被称为另一个字符串的子代。给定两个长度相等的字符串,那么可以构造为最长的字符串的最长字符串是什么?
例如,ABCD和ABDC有两个最大长度为3的子代ABC和ABD。它们可以通过消除两个字符串中的D或C来形成。请注意,我们不会将ABCD视为普通孩子,因为我们无法重新排列字符和ABCD ABDC。
commonChild具有以下参数:
s1,s2:两个相等长度的字符串
打印最长的字符串的长度,使之成为两个字符串的子代。
样本输入
HARRY SALLY
示例输出
2
我使用矢量函数编写了以下函数。
int commonChild(string s1, string s2) {
vector <char> v1; vector <char> v2; vector <char> v3;
for(int i=0;i<s1.size();i++)
{
v1.push_back(s1[i]);
}
for(int j=0;j<s2.size();j++)
{
v2.push_back(s2[j]);
}
set_intersection(v1.begin(),v1.end(),v2.begin(), v2.end(), v3.begin());
return(v3.size());
}
它没有显示错误。但输出始终为0。出了什么问题?
答案 0 :(得分:0)
您的问题在这里:
set_intersection(v1.begin(),v1.end(),v2.begin(), v2.end(), v3.begin());
^
This iterator is invalid ----------+
v3
向量为空,并且将v3.begin()
用作set_intersection()
的输出迭代器是无效的。
替换为back_inserter(v3)
,以获得将元素插入v3
的输出迭代器。
set_intersection(v1.begin(),v1.end(),v2.begin(), v2.end(), back_inserter(v3));
看到它运行there。
参考文献:
注释
答案 1 :(得分:0)
您遇到许多问题。
首先,您无法通过vector
向iterator
添加元素,因此v3.begin()
不是std::set_intersection
的合适输入。对于d_first
的{{1}}参数,可以以非空的set_difference
开头,也可以使用std::back_inserter
。
第二,std::set_intersection
需要排序的输入,而您的样本输入则不需要。对输入进行排序会给函数带来不同的含义。
第三,虽然没有错,但将v3
复制到std::string
毫无意义。 std::vector<char>
是容器类型。