#include <iostream>
#include <string>
using namespace std;
string str1,str2;
int main() {
cin>>str1>>str2;
if(str1.length()<str2.length())
swap(str1,str2);
for(int i=0; i<str1.length(); i++) {
int num=0,ii=i;
for(int j=0; j<str2.length(); j++) {
if(str2[j]-'0'+str1[ii++]-'0'<=3) {
num++;
if(ii>=str1.length()) {//1.有重合但超出str1范围
cout<<str1.length() +str2.length()-num;
return 0;
}
} else
break;
}
if(num==str2.length()) {//2. str1包含 str2
cout<<str1.length();
return 0;
}
}
cout<<str1.length()+str2.length();//3.都不包含
return 0;
}
/*
2112112112
2212112
10
2112112112
2212112112222122
23
*/
从这个数据量上看,也只需要模拟一遍就好了,时间复杂度在 2*短的长度 + 长的长度。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
我琢磨了这个题目,我觉得可以从下列7种情况考虑。 白驹_过隙 回答只考虑了前2种情况。但其余5种情况也需要考虑。
1)长短积木完全不能重叠(量块积木头尾都是2且短积木不能扣在长积木上),容器最短长度为两块积木长度之和。
2) 短积木完全可以扣在长积木上,容器的最短长度就是长积木的长度。
3) 把短积木掉一头完全扣在长积木上,容器的最短长度就是长积木的长度。。
4) 短积木的尾部部分扣在长积木开头几列上,容器最短长度为两块积木长度之和减去重叠部分长度。
5) 短积木的头部部分扣在长积木尾部几列上,容器最短长度为两块积木长度之和减去重叠部分长度。
6) 短积木掉一头后的尾部部分扣在长积木开头几列上,容器最短长度为两块积木长度之和减去重叠部分长度。
7) 短积木掉一头后的头部部分扣在长积木尾部几列上,容器最短长度为两块积木长度之和减去重叠部分长度。
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y