题目链接:
题目描述:
猜数字游戏,两个字符串,secret与 guess,将guess与secret比较,找出guess中,有多少是数字正确且位置正确的,有多少是数字正确位置错误的。
Secret number: “1807”
Friend’s guess: “7810”
return “1A3B”
Secret number: “1123”
Friend’s guess: “0111”
return “1A1B”
题目分析:
A代表数字正确且位置正确的个数
B代表数字正确但位置不正确的个数
两次遍历。
第一次找数字正确且位置正确的(剩下的要么是数字正确但位置不正确的,要么是数字不正确位置也不正确的),用一个数组记录guess中与secret不同的字符。
第二次遍历就在剩下两种情况中找数字正确但位置不正确的,记录数组如果表示存在secret中字符,那么就是数字正确但位置不正确。
代码:
class Solution {
public:
string getHint(string secret, string guess){
int A=0,B=0;
int len=secret.size();
int num[10]={0};
for(int i=0;i<len;i++){
if(secret[i]==guess[i]){
A++;
}
else{
num[guess[i]-'0']++;
}
}
for(int i=0;i<len;i++){
if(secret[i]!=guess[i] && num[secret[i]-'0']>0){
num[secret[i]-'0']--;
B++;
}
}
char result[128] = {0};
sprintf(result, "%dA%dB", A, B);
return result;
}
};