@@ -42,7 +42,7 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcof/%E9%9D%A2%E8%AF%95%E9
4242
4343### 方法一:数组或哈希表
4444
45- 我们可以使用哈希表或数组来统计每个字符出现的次数 ,然后再遍历一遍字符串,找到第一个出现次数为 $1$ 的字符。
45+ 我们可以使用哈希表或数组 $cnt$ 来统计每个字符出现的次数 ,然后再遍历一遍字符串,找到第一个出现次数为 $1$ 的字符。
4646
4747时间复杂度 $O(n)$,空间复杂度 $O(C)$。其中 $n$ 为字符串长度;而 $C$ 为字符集大小,本题中 $C=26$。
4848
@@ -121,12 +121,12 @@ func firstUniqChar(s string) byte {
121121
122122``` ts
123123function firstUniqChar(s : string ): string {
124- const map = new Map ( );
124+ const cnt : number [] = Array ( 26 ). fill ( 0 );
125125 for (const c of s ) {
126- map . set ( c , ! map . has ( c )) ;
126+ cnt [ c . charCodeAt ( 0 ) - 97 ] ++ ;
127127 }
128128 for (const c of s ) {
129- if (map . get ( c ) ) {
129+ if (cnt [ c . charCodeAt ( 0 ) - 97 ] === 1 ) {
130130 return c ;
131131 }
132132 }
@@ -137,16 +137,15 @@ function firstUniqChar(s: string): string {
137137#### Rust
138138
139139``` rust
140- use std :: collections :: HashMap ;
141140impl Solution {
142141 pub fn first_uniq_char (s : String ) -> char {
143- let mut map = HashMap :: new () ;
144- for c in s . as_bytes () {
145- map . insert ( c , ! map . contains_key ( c )) ;
142+ let mut cnt = [ 0 ; 26 ] ;
143+ for c in s . chars () {
144+ cnt [( c as usize ) - ( 'a' as usize )] += 1 ;
146145 }
147- for c in s . as_bytes () {
148- if map [ c ] {
149- return char :: from ( * c ) ;
146+ for c in s . chars () {
147+ if cnt [( c as usize ) - ( 'a' as usize )] == 1 {
148+ return c ;
150149 }
151150 }
152151 ' '
@@ -162,7 +161,7 @@ impl Solution {
162161 * @return {character}
163162 */
164163var firstUniqChar = function (s ) {
165- const cnt = new Array (26 ).fill (0 );
164+ const cnt = Array (26 ).fill (0 );
166165 for (const c of s) {
167166 cnt[c .charCodeAt (0 ) - 97 ]++ ;
168167 }
0 commit comments