解题思路:
一、先划分大的框架,从整体看 分为length相同和不相同。
二、lengthb不相同只有一种情况,那就是第1种情况。
三、length相同分为三种情况,而这三种情况又分为(大小写相等,和大小写不等两种情况)(情况2,情况3)和完全不等于
(即在长度相等的情况下只要存在有一个不等,而且不是大小写的关系)(情况4)。
四、定义一个flag,判断每一种情况时给它赋值,最后输出。
注意事项:
一定要理清逻辑再写代码。判断2 3种情况时要把fabs()写在后面。因为程序先判断前面的,第四种情况可能也满足fabs(a[i]-b[i])==32,eg:Ba 和bc;
参考代码:
#include<bits/stdc++.h> using namespace std; int flag; string a,b; int len; int k; int _check1(int len) { int i,j; for( i=0; i<len; i++) { if(a[i]!=b[i]&&fabs(a[i]-b[i])!=32) { k--; //只要有一个不相等,就计数 -1 //最后我只要判断小于0就满足第4种情况,等于0就是完全相等 } if(a[i]!=b[i] && fabs(a[i]-b[i])==32) { k++;// 如果满足条件3大小写不同的话,K应该等于len } /*if(a[i]==b[i]){ k+=2;//如果满足条件2 完全相等的话,k最后应该是len的两倍 } */ } if(k==0)//如果没有不相等,则K=0 return flag = 2; if(k<0) return flag =4; if(k>0) return flag =3; } int main() { cin>>a>>b; int len1 = a.size(); int len2 = b.size(); if(len1 == len2) { _check1(len1); printf("%d",flag); } else { flag=1; printf("%d",flag); } return 0; }
0.0分
3 人评分
这个题解是存在问题的,举个例子,只要字符串中对应位置完全不相同的对数与仅仅是大小写不同的对数相同。那么加一的次数和减一的次数就会相同,最终得到的结果就是两字符串完全相同。解决方案是只要同时满足字符串对应字符不相同并且不是因为大小写的缘故,那么直接return。
#include<bits/stdc++.h> using namespace std; int flag=0,k=0; string a,b; int check(int length) { for(int i=0;i<length;i++) { if(a[i]!=b[i]&&fabs(a[i]-b[i])!=32) { flag=4; return 0; } if(a[i]==b[i]) { k+=2; } else { if(k%2==0) { k=k+1; } } } if(k%2==0) { flag=2; }else{