首先统计下两个字串长度,+个数是否相同,不同肯定无解。因为每个+对应一个匹配的+,那么从左到右一个匹配一个结果肯定是最优的 (反证法搞一下应该就可以整出来吧...)..
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <stack>
#include <queue>
using namespace std;
typedef long long ll;
const int inf=(1<<29);
char s1[5200],s2[5200];
bool vis[5200];
int n,m,l1,l2;
int main()
{
// freopen("in.txt","r",stdin);
gets(s1);
gets(s2);
l1=strlen(s1);
l2=strlen(s2);
int num1=0,num2=0;
for (int i=0; i<l1; i++)
if (s1[i]=='+') num1++;
for (int i=0; i<l2; i++)
if (s2[i]=='+') num2++;
if (l1!=l2 || num1!=num2)
{
puts("-1");
return 0;
}
memset(vis,false,sizeof vis);
int ans=0;
int last=0;
for (int i=0; i<l1; i++)
{
if (s1[i]=='-') continue;
while (s2[last]!='+')
{
last++;
}
ans+=abs(i-last);
last++;
}
printf("%d\n",ans);
return 0;
}

本文介绍了一种用于解决两个字符串中+号匹配问题的最优算法。该算法通过比较两个字符串的长度和+号的数量来判断是否存在匹配的可能性,并采用从左至右依次匹配的方法实现最短匹配路径。文中提供了一个C++实现的例子。
82

被折叠的 条评论
为什么被折叠?



