1- //Solution1: using array T: O(n) S: O(1)
1+ // Solution1: HashMap
2+ // T: O(2n) S: O(10)
23class Solution {
34 public String getHint (String secret , String guess ) {
4- int length = secret .length ();
5+ if (secret == null || guess == null ) return null ;
6+ int len = secret .length ();
57 int bulls = 0 , cows = 0 ;
6- int [] numbers = new int [10 ];
8+ int [] count = new int [10 ];
79
8- for (int i = 0 ; i < length ; i ++) {
10+ for (int i = 0 ; i < len ; i ++) {
911 char s = secret .charAt (i );
1012 char g = guess .charAt (i );
11-
12- if (s == g ) bulls ++;
13- else {
14- if (numbers [s - '0' ]++ < 0 ) cows ++;
15- if (numbers [g - '0' ]-- > 0 ) cows ++;
13+ if (s == g ) bulls ++;
14+ else count [s -'0' ]++;
15+ }
16+
17+ for (int i = 0 ; i < len ; i ++) {
18+ char s = secret .charAt (i );
19+ char g = guess .charAt (i );
20+ if (s != g && count [g -'0' ] > 0 ) {
21+ cows ++;
22+ count [g -'0' ]--;
1623 }
1724 }
18- return bulls + "A" + cows + "B" ;
25+ return bulls + "A" + cows + "B" ;
1926 }
2027}
2128
22-
23- //Own way: using HashMap T: O(n) S: O(n )
29+ // Solution2: HashMap (Better version)
30+ // T: O(n) S: O(10 )
2431class Solution {
2532 public String getHint (String secret , String guess ) {
26- int length = secret .length ();
33+ if (secret == null || guess == null ) return null ;
34+ int len = secret .length ();
2735 int bulls = 0 , cows = 0 ;
28- Map <Character , Integer > map = new HashMap <>();
29-
30- for (int i = 0 ; i < length ; i ++) {
31- char tmp = secret .charAt (i );
32- map .put (tmp , map .getOrDefault (tmp , 0 ) + 1 );
33-
34- if (tmp == guess .charAt (i )) {
35- bulls ++;
36- map .put (tmp , map .get (tmp ) - 1 );
37- }
38- }
36+ int [] count = new int [10 ];
3937
40- for (int i = 0 ; i < length ; i ++) {
41- char tmp = guess .charAt (i );
42- if (tmp != secret .charAt (i ) && map .getOrDefault (tmp , 0 ) != 0 ) {
43- cows ++;
44- map .put (tmp , map .get (tmp ) - 1 );
38+ for (int i = 0 ; i < len ; i ++) {
39+ char s = secret .charAt (i );
40+ char g = guess .charAt (i );
41+ if (s == g ) bulls ++;
42+ else {
43+ if (count [s - '0' ] < 0 ) {
44+ cows ++;
45+ }
46+ count [s - '0' ]++;
47+
48+ if (count [g - '0' ] > 0 ) {
49+ cows ++;
50+ }
51+ count [g - '0' ]--;
4552 }
4653 }
47- String res = bulls + "A" + cows + "B" ;
48- return res ;
54+ return bulls + "A" + cows + "B" ;
4955 }
50- }
56+ }
57+
58+
0 commit comments