这是我在洛谷上刷到的第一道ACM入门题,奈何我只有英语四级水平,所以看到题目就头疼(还特地查了下标题意思),好在给的样例浅显易懂,再结合下变量范围就可以直接写啦。
#include<iostream>
using namespace std;
string s[1002],save[1002];
int b[9];
int main()
{
string a;
int n, cnt = 0, flag = 1;
cin >> a >> n;
for(int i = 1; i <= n; i++)
cin >> s[i];
for(int i = 1; i <= n; i++){
flag = 1;
for(int j = 0; j < 9; j++){
if(a[j]!='*' && a[j]!=s[i][j])
{
flag = 0;
}
else
continue;
}
if(flag == 1)
{
save[cnt] = s[i];
cnt++;
}
}
cout << cnt << endl;
for(int i = 0; i < cnt; i++)
cout << save[i] << endl;
return 0;
}
改进后:
#include<iostream>
using namespace std;
string s[1002];
int main()
{
int n, cnt = 0, flag = 1;
cin >> s[0] >> n;
for(int i = 1; i <= n; i++)
cin >> s[i];
for(int i = 1; i <= n; i++){
flag = 1;
for(int j = 0; j < 9; j++){
if(s[0][j]!='*' && s[0][j]!=s[i][j])
flag = 0;
else
continue;}
if(flag == 1)
cnt++;}
cout << cnt << endl;
for(int i = 1; i <= n; i++){
flag = 1;
for(int j = 0; j < 9; j++){
if(s[0][j]!='*' && s[0][j]!=s[i][j])
flag = 0;
else
continue;}
if(flag == 1)
cout << s[i] << endl;}
return 0;
}
总结:通过把目标字符串存入带比较的字符串数组,会牺牲一丢丢时间,在空间复杂度上实现节省。