/*********************************************
*程序: 求最大的排列相同数 *
*作者: flyli(programfan(asoka)) *
*版本: 数据结构题目 *
*程序说明:目的是求出两个字串符的最大排列相 *
* 同数 ,比如abfced和axdfmbe的最大排 *
* 列相同数就是3(ade),当然ad也是排列 *
* 相同数,但是不是最大的 *
*********************************************/
# include
using namespace std;
/**************************************
*建立一个类,作用是求出最大排列相同数 *
**************************************/
class SameString
{
public:
SameString(char*,char*); //构造函数
int SS_MaxString(void);
void text(); //为了初始化两个内部成员的函数
private:
int SS_ALength;
int SS_BLength; //2个字串符的长度
char* SS_StringA;
char* SS_StringB; //2个字串符的地址
int SS_MaxString(int,int); //求出最大排列数的函数
int SS_max(int,int); //求出2个数中较大的那个
int SS_length(char *); //量一个字串符长度的函数
};
/**********************************
*构造函数,接受2个字串符的首地址 *
**********************************/
SameString::SameString(char* m,char* n)
{
SS_StringA = m;
SS_StringB = n;
}
/*********************************
* 次类的外部接口函数 *
* 可以用来初始2个成员 *
* 和打开程序的核心函数 *
*********************************/
int SameString::SS_MaxString(void)
{
SS_ALength = SS_length(SS_StringA);
SS_BLength = SS_length(SS_StringB);
SS_MaxString(SS_ALength,SS_BLength);
}
/***********************************
*核心函数,接受2个字串符还没有处理 *
*的字符的个数 *
***********************************/
int SameString::SS_MaxString(int m,int n)
{
if(m == 0||n == 0)return 0;
else if(*(SS_StringA+m-1)==*(SS_StringB+n-1))return SS_MaxString(m-1,n-1)+1;
else return SS_max(m,n);
}
/**********************************
*一个简单的求最大值的函数,返回较 *
*大的那个值 *
**********************************/
int SameString::SS_max(int m,int n)
{
if(m == 0||n == 0)return 0;
int a = SS_MaxString(m-1,n);
int b = SS_MaxString(m,n-1);
if(a>b)return a;
else return b;
}
/*********************************
*通过一个字串符的首地址算出它的字*
*符个数 *
*********************************/
int SameString::SS_length(char *m)
{
char *p = m;
int i = 0;
while(*p!=’\0′)
{
p++;
i++;
}
return i;
}
/***********************************
* 嘿嘿,这就是用来测试这个类的主函 *
*数了,呵呵^_^ *
***********************************/
int main(void)
{
char m[]=”aabcdefghij”;
char n[]=”acbcdea”;
int i;
SameString a(m,n);
i=a.SS_MaxString();
cout<
system(“pause”);
return 0;
}