算法分析
题目意思:
- 1、
day
:找到第一个和第二个字符串中,第一对相同的大写字母且在['A','G']
范围内的字母对应的星期几(只有7
天可以选) - 2、
hour
:找到第一个和第二个字符串中,第一对相同字符且在['A','N']
或者['0','9']
范围内的字符对应的小时(只有0
到23
小时可以选) - 3、
min
:找到第三个和第四个字符串中,第一对相同的英文字符的位置
时间复杂度 $O(n)$
参考文献
pat
C++ 代码
#include <iostream>
using namespace std;
string days[7] = {"MON","TUE","WED","THU","FRI","SAT","SUN"};
int main()
{
string s1,s2,s3,s4;
cin >> s1 >> s2 >> s3 >> s4;
//找第一个相同的大写字母
string day;
int hour;
for(int i = 0;i < s1.size() && i < s2.size();i ++)
{
if(s1[i] >= 'A' && s1[i] <= 'G' && s1[i] == s2[i])
{
day = days[s1[i] - 'A'];
for(int j = i + 1;j < s1.size() && j < s2.size();j ++)
{
if((s1[j] >= 'A' && s1[j] <= 'N' || s1[j] >= '0' && s1[j] <= '9') && s1[j] == s2[j])
{
if(s1[j] >= '0' && s1[j] <= '9') hour = s1[j] - '0';
else hour = s1[j] - 'A' + 10;
break;
}
}
break;
}
}
//找第一对相同的英文字符的位置
int idx ;
for(int i = 0;i < s3.size() && i < s4.size();i ++)
{
if((s3[i] >= 'A' && s3[i] <= 'Z' || s3[i] >= 'a' && s3[i] <= 'z') && s3[i] == s4[i])
{
idx = i;
break;
}
}
cout << day << " " ;
if(hour >= 10) cout << hour << ":";
else cout << "0" << hour << ":";
if(idx >= 10) cout << idx << endl;
else cout << "0" << idx << endl;
return 0;
}