有一种话,叫做废话,我就不说了,虽然这句也是。直接上题:
在A字符串中查找到出现B字符串的所有位置的集合。例如,A字符串“ABCDDDBC”;B字符串“ABC”,那么对应的输出为123,128,178
这道题可能可以使用动态规划吧,我不太会,还是笨办法,循环。
void Print(string &st1,string &st2,vector<int> &ve,
int st1_i,int st2_i,int ve_i)
{
if(ve_i == st2.size())
{
for(int i = 0; i < ve_i; ++i)
cout<<ve[i]<<" ";
cout<<endl;
return ;
}
for(int i = st1_i; i < st1.size(); ++i)
{
for(int j = st2_i; j < st2.size(); ++j)
{
if(st1[i] == st2[j])
{
ve[ve_i] = i+1;
st1_i = i;
st2_i = j;
Print(st1,st2,ve,i+1,j+1,ve_i+1);
}
}
}
}
void Print(string &st1,string &st2)
{
if(st1.size() <= 0 || st2.size() <= 0)
return;
vector<int> ve;
int len = st2.size();
ve.resize(len);
Print(st1,st2,ve,0,0,0);
}