思路:首先看见两个字符串还有其中有‘?’的不能直接从字符串一枚举到字符串二,就需要从0分钟枚举到1439分钟然后通过时间的进制分离小时和分钟,判断小时和分钟是否满足字符串一和二然后在将符合的分钟存进代表字符串一和二的数组,最后在枚举数组判断当字符串一数组小于字符串二数组值更新最大值和最小值
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
char s1[8],s2[8];
scanf("%s %s",s1,s2);
int a1[1500],a2[1500];
int b1=0,b2=0;
for(int i=0;i<60*24;i++)
{
int sum=i;
if((s1[0]-'0'==sum/600||s1[0]=='?')&&(s1[1]-'0'==sum/60%10||s1[1]=='?')&&(s1[3]-'0'==sum%60/10||s1[3]=='?')&&(s1[4]-'0'==sum%60%10||s1[4]=='?'))
{
a1[b1++]=i;
}
if((s2[0]-'0'==sum/600||s2[0]=='?')&&(s2[1]-'0'==sum/60%10||s2[1]=='?')&&(s2[3]-'0'==sum%60/10||s2[3]=='?')&&(s2[4]-'0'==sum%60%10||s2[4]=='?'))
{
a2[b2++]=i;
}
}
int max=0,min=60*24;
for(int i=0;i<b1;i++)
{
for(int j=0;j<b2;j++)
{
if(a1[i]<a2[j])
{
max=max>a2[j]-a1[i]?max:a2[j]-a1[i];
min=min<a2[j]-a1[i]?min:a2[j]-a1[i];
}
}
}
cout<<min<<' '<<max;
return 0;
}