#include<stdio.h>
#include<string.h>
/*
++-+--+
-++--++
每个子符串长度不超过5000。不存在,输出-1
4*/
#include<stdio.h>
#include<string.h>
int Abs(int x){
return x<0?-x:x;
}
int main(){
char s1[5001],s2[5001];
while(~scanf("%s",s1)){
scanf("%s",s2);
if(strlen(s1)!=strlen(s2)){//如果这两个串长度不相等
printf("-1\n");//输出-1
continue;//并且继续下一轮测试
}
int len1,len2;
len1=len2=0;//分别统计两个字符串的加号个数
for(int i=0;s1[i];i++)
if(s1[i]=='+') ++len1;
for(int i=0;s2[i];i++)
if(s2[i]=='+') ++len2;
if(len1!=len2) {
printf("-1\n");//两个字符串加号个数不相等 输出-1
continue;//并且进行下一轮测试
}
int i=0,j=0;
int ans=0;//+-+---+---
while(s1[i] && s2[j]){//两个字符串同时没有结束
while(s1[i]&&s1[i]!='+') ++i;//找到第一个字符串 为加号的时候并且字符串没有遍历结束
while(s2[j]&&s2[j]!='+') ++j;//找第二个字符串的加号
if(s1[i]==0 || s2[j]==0) break;//如果两个字符串遍历完都没有出现加号 跳出循环
ans += Abs(i-j);//求出两个字符串出现加号的下标之差 对应移动多少次
++i;++j;//寻找下一对加号
}
printf("%d\n",ans);
}
return 0;
}
int Abs(int x){
return x<0?-x:x;
}
int main(){
char s1[5001],s2[5001];
while(~scanf("%s",s1)){
scanf("%s",s2);
if(strlen(s1)!=strlen(s2)){
printf("-1\n");
continue;
}
int len1,len2;
len1=len2=0;
for(int i=0;s1[i];i++)
if(s1[i]=='+') ++len1;
for(int i=0;s2[i];i++)
if(s2[i]=='+') ++len2;
if(len1!=len2) {
printf("-1\n");
continue;
}
int i=0,j=0;
int ans=0;
while(s1[i] && s2[j]){
while(s1[i]&&s1[i]!='+') ++i;
while(s2[j]&&s2[j]!='+') ++j;
if(s1[i]==0 || s2[j]==0) break;
ans += Abs(i-j);
++i;++j;
}
printf("%d\n",ans);
}
return 0;
}
+-字符串
最新推荐文章于 2023-01-09 22:45:33 发布