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;
}
听朋友说这个题可以用动态规划解决,目前我还不太了解动态规划,所以只能选择这种笨方法了,大家可以试下用动态规划去解决。