P7858の题解
题意简述
给出一字符串,判断其是否能与给定的字符串输入顺序相符。
题目分析
这种键盘问题通常要用到一个简单算法——构造数组,也就是大家所说的打表。
打表(用空间换时间)————一般是指将所有需要用到的结果先计算出来,然后后面需要用到时就可以直接查表获得。
那么本题所要保存的东西就是输入每个字母所需的按键,
如果这张表打好了,那么剩下的操作只剩下与给定的字符串比较,这里又有一个难点,输入的是字符串,要将其转化为数字比对,这里要用 ASCII 表。
由表可知,需判断的小写字母字符串需要
Code
#include<bits/stdc++.h>
using namespace std;
int x[26]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9};//构造数组
char a[1001][1001],b[1001];
int main()
{
int n,ans=0,len=0;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>b;len=strlen(b);
for(int i=1;i<=n;i++)
{
int l=strlen(a[i]);
if(l==len)
{
bool flag=true;
for(int j=0;j<l;j++)if(x[a[i][j]-97]!=b[j]-48)
flag=false;
if(flag)ans++;//判断并统计答案
}
}
cout<<ans;
return 0;
}
温馨提示:本题卡数组大小记得把数组开大点哦。