Array
Hash Table
String
Description
Given a string array words
, return an array of all characters that show up in all strings within the words
(including duplicates) . You may return the answer in any order .
Example 1:
Input: words = ["bella","label","roller"]
Output: ["e","l","l"]
Example 2:
Input: words = ["cool","lock","cook"]
Output: ["c","o"]
Constraints:
1 <= words.length <= 100
1 <= words[i].length <= 100
words[i]
consists of lowercase English letters.
Solutions
Solution 1
Python3 Java C++ Go TypeScript
class Solution :
def commonChars ( self , words : List [ str ]) -> List [ str ]:
cnt = Counter ( words [ 0 ])
for w in words :
ccnt = Counter ( w )
for c in cnt . keys ():
cnt [ c ] = min ( cnt [ c ], ccnt [ c ])
ans = []
for c , v in cnt . items ():
ans . extend ([ c ] * v )
return ans
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 class Solution {
public List < String > commonChars ( String [] words ) {
int [] cnt = new int [ 26 ] ;
Arrays . fill ( cnt , 10000 );
for ( String w : words ) {
int [] ccnt = new int [ 26 ] ;
for ( int i = 0 ; i < w . length (); ++ i ) {
++ ccnt [ w . charAt ( i ) - 'a' ] ;
}
for ( int i = 0 ; i < 26 ; ++ i ) {
cnt [ i ] = Math . min ( cnt [ i ] , ccnt [ i ] );
}
}
List < String > ans = new ArrayList <> ();
for ( int i = 0 ; i < 26 ; ++ i ) {
while ( cnt [ i ]-- > 0 ) {
ans . add ( String . valueOf (( char ) ( i + 'a' )));
}
}
return ans ;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 class Solution {
public :
vector < string > commonChars ( vector < string >& words ) {
int cnt [ 26 ];
memset ( cnt , 0x3f , sizeof ( cnt ));
for ( auto & w : words ) {
int ccnt [ 26 ]{};
for ( char & c : w ) {
++ ccnt [ c - 'a' ];
}
for ( int i = 0 ; i < 26 ; ++ i ) {
cnt [ i ] = min ( cnt [ i ], ccnt [ i ]);
}
}
vector < string > ans ;
for ( int i = 0 ; i < 26 ; ++ i ) {
while ( cnt [ i ] -- ) {
ans . emplace_back ( 1 , i + 'a' );
}
}
return ans ;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 func commonChars ( words [] string ) ( ans [] string ) {
cnt := [ 26 ] int {}
for i := range cnt {
cnt [ i ] = 1 << 30
}
for _ , w := range words {
ccnt := [ 26 ] int {}
for _ , c := range w {
ccnt [ c - 'a' ] ++
}
for i , v := range cnt {
cnt [ i ] = min ( v , ccnt [ i ])
}
}
for i , v := range cnt {
for v > 0 {
ans = append ( ans , string ( i + 'a' ))
v --
}
}
return
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 function commonChars ( words : string []) : string [] {
const freq : number [] = new Array ( 26 ). fill ( 10000 );
for ( const word of words ) {
const t : number [] = new Array ( 26 ). fill ( 0 );
for ( const c of word . split ( '' )) {
++ t [ c . charCodeAt ( 0 ) - 'a' . charCodeAt ( 0 )];
}
for ( let i = 0 ; i < 26 ; ++ i ) {
freq [ i ] = Math . min ( freq [ i ], t [ i ]);
}
}
const res : string [] = [];
for ( let i = 0 ; i < 26 ; ++ i ) {
while ( freq [ i ] -- > 0 ) {
res . push ( String . fromCharCode ( i + 'a' . charCodeAt ( 0 )));
}
}
return res ;
}
GitHub