这个题意真的很难理解,说的完全不是人话,但是其实看懂了,这个题就非常容易做了,意思就是A代表这个数在答案里并且位置也对,B代表这个数在答案里,但是位置不对。这样就非常容易理解了。
最朴素解法。5ms
class Solution {
public String getHint(String secret, String guess) {
char[] secrets = secret.toCharArray();
char[] guesses = guess.toCharArray();
int x = 0;
int y = 0;
int[] xs = new int[10];
int[] ys = new int[10];
for(int i=0,j=0;i<secrets.length;i++,j++){
int ansx = secrets[i]-'0';
int ansy = guesses[j]-'0';
if(ansx==ansy){
x++;
} else{
xs[ansx]++;
ys[ansy]++;
if(xs[ansy]>0){
xs[ansy]--;
ys[ansy]--;
y++;
}
if(ys[ansx]>0){
ys[ansx]--;
xs[ansx]--;
y++;
}
}
}
String res = x+"A"+y+"B";
return res;
}
}
看见评论一个大佬,这样写快了1ms
class Solution {
public String getHint(String secret, String guess) {
char[] secrets = secret.toCharArray();
char[] guesses = guess.toCharArray();
int x = 0;
int y = 0;
int[] xs = new int[10];
int[] ys = new int[10];
for(int i=0;i<secrets.length;i++){
int ansx = secrets[i]-'0';
int ansy = guesses[i]-'0';
xs[ansx]++;
ys[ansy]++;
x += ansx == ansy ? 1:0;
}
for(int i = 0;i<10;i++){
y += Math.min(xs[i],ys[i]);
}
y-=x;
return x+"A"+y+"B";
}
}