+-字符串
- 描述
- Shiva得到了兩個只有加號和減號的字符串,字串長度相同。Shiva一次可以把一個加號和它相鄰的減號交換。他想知道最少需要多少次操作才能把第一個字符串變換成第二個字符串。你現在要去幫助他完成那個這個問題。
- 輸入
- 多組測試數據
每組數據有兩行,每行包含一個由”+”和”-“最成的字符串。每個子符串長度不超過5000。 - 輸出
- 僅一個整數,輸出最少需要操作的次數。如果答案不存在,輸出-1。
- 樣例輸入
-
++-+--+ -++--++
- 樣例輸出
-
4
- 來源
- NBOJ
- 上傳者
這個題要弄清楚一點,就是要想次數最少,我們要逐次比較,找第一個不相等的,然後從第二個串裏面找出最近的相等的與第二個串不想等的位置進行替換,算出移動的
次數,依次算下去,如果有一次不能找到,證明無解
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
char s1[5001],s2[5001];
int m,n,i,j,len,flag,Q;
while(scanf("%s%s",s1,s2)!=EOF)
{
len=strlen(s1);
Q=0;
int sum=0;
for(i=0;i<len;i++)
{
if(s1[i]!=s2[i])
{
flag=1;
for(j=i+1;j<len;j++)
{
if(s2[j]==s1[i])
{
sum+=j-i;
s2[j]=s2[i];
flag=0;
break;
}
}
if(flag)
{
Q=1;
break;
}
}
}
if(Q)
printf("-1\n");
else
printf("%d\n",sum);
}
return 0;
}