C++笔试题目,主要涉及组合算法,非递归最好

Gob00st 2008-07-02 07:10:14
原题:
输入两个字符串,比如abdbcc, abc
输出第二个字符串在第一个字符串中的连接次序
即输出: 014,015,034,035.

初步分析:
很容易得到a,b,c在主串中的位置,{0},{1,3},{4,5}
问题就变为求{0},{1,3},{4,5}的组合:
014 015 034 035

请问如果由{0},{1,3},{4,5}求出他们的这种组合
014 015 034 035 ?

非递归实现最好。

谢谢。
...全文
440 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
妹妹 2011-07-21
  • 打赏
  • 举报
回复
还是不懂!
  • 打赏
  • 举报
回复
令S="abdbcc",T="abc"
dp(i,j)表示T的前j位构成的字符串在S的前i位中出现的“连接”次数

边界条件:
如果T[1]==S[1],那么dp(1,1)=1,否则dp(1,1)=0;
dp(1,j)=0,j>=2;

状态转移方程:
if(S[i]==T[j])
dp(i,j)=dp(i-1,j)+dp(i-1,j-1);
else
dp(i,j)=dp(i-1,j);

上面只记录了“连接”的次数,如果需要,可以将这些“连接次序”也记录下来。
sssssjjjj 2008-07-03
  • 打赏
  • 举报
回复
把a,b,c在主串中的位置({0},{1,3},{4,5})分别存成数组,放到一个list里
把n设成第二个字符串(abc)的长度
M[i]设成list中第i个数组的length-1(例子中为M={0,1,1})
输出(也就是他那段代码中的printf("%d ",A[j]))改成输出list中第j个数组的第A[j]个元素
wzw200 2008-07-03
  • 打赏
  • 举报
回复
学习
ochinchina 2008-07-03
  • 打赏
  • 举报
回复
一种算法
#include <iostream>

using namespace std;

void printIndex( int **index, int n, int *pos ) {
for( int i = 0; i < n; i++ ) {
cout << index[i][ pos[i] ] << " ";
}
cout << endl;
}

void printAll( int **index, int n ) {
int *pos = new int[ n ];
int i = 0;

for( i = 0; i < n; i++ ) {
pos[i] = -1;
}

for( i = 0; i >= 0 && i < n; ) {
pos[i]++;
if( index[i][ pos[i] ] < 0 ) {
pos[i] = -1;
i--;
} else if( i != 0 ) {
while( index[i][pos[i]] >= 0 && index[i-1][pos[i-1]] >= index[i][pos[i]] ) {
pos[i]++;
}

if( index[i][pos[i]] < 0 ) {
pos[i]--;
} else if( i == n - 1 ) {
printIndex( index, n, pos );
} else {
i++;
}
} else {
i++;
}

}

delete []pos;
}

int main( int argc, char** argv ) {

int **index = new int*[3];

index[0] = new int[2];
index[0][0]=0;
index[0][1]=-1;
index[1]= new int[3];
index[1][0] = 1;
index[1][1] = 3;
index[1][2] = -1;
index[2] = new int[3];
index[2][0]= 4;
index[2][1]= 5;
index[2][2]= -1;

printAll( index, 3 );
}
Gob00st 2008-07-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sssssjjjj 的回复:]
http://topic.csdn.net/u/20080630/19/11e24ad4-ffe3-4278-8091-aa1c3e598a95.html
[/Quote]
ms并不能解决这个组合问题...
sssssjjjj 2008-07-02
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080630/19/11e24ad4-ffe3-4278-8091-aa1c3e598a95.html

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧