您的位置:首页 > 其它

CVTE笔试题二:判断两个字符串的拼接方式是否相同

2017-07-30 21:47 288 查看
CVTE编程题二:输入两个字符串,判断这两个字符串的拼接方式是否相同

                            具体要求: 给定函数 bool func(const string& s,const string& t);

                                   示例: 输入paper    title,输出:true;

                                               输入aba     abab,输出:false;

                                               输入look     feed,输出:true;

本题采用两个标记数组来记录两个字符串的拼接方式,遇到相同的字符就用同一个数字标记,下一组相同字符用另一个数字标记,依次类推,若两个标记数组一样则拼接方式相同,否则不相同。

#include <iostream>
#include <string>
#include <vld.h>
using namespace std;

void Tag_arr(string str,int *a,int len)                    //求两个字符串的标记数组
{
int num = 1;
for(int i=0;i<len-1;++i)
{
for(int j=i+1;j<len-i;++j)
{
if(str[j] == str[i])
{
a[i] = num++;
a[j] = a[i];
}
}
}
}
bool func(const string& s,const string& t)
{
int len1 = s.size();
int len2 = t.size();
if(len1 != len2 )
return false;
int *arr = new int[len1];
int *brr = new int[len2];
for(int i=0;i<len1;++i)
{
arr[i] = -1;
brr[i] = -1;
}

Tag_arr(s,arr,len1);
Tag_arr(t,brr,len2);

for(int i=0;i<len1;++i)
{
if(arr[i] != brr[i])                   //判断两个标记数组是否相同,若相同返回真,否则返回假
{
return false;
}
}

delete []arr;
delete []brr;
return true;
}
int main()
{
string str1,str2;
cin>>str1;
cin>>str2;
int tag = func(str1,str2);
if(tag == 1)
cout<<"true"<<endl;
else
cout<<"false"<<endl;
return 0;
}


听朋友说这个题可以用动态规划解决,目前我还不太了解动态规划,所以只能选择这种笨方法了,大家可以试下用动态规划去解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: