統計字串中單詞個數的演算法優化

2022-02-23 10:25:40 字數 1960 閱讀 1508

要求:輸入乙個字串,統計每個單詞的個數。單詞間用空格隔開,可多個空格,寫出自己認為高效的演算法。

例如:輸入:i love love china

輸出為:

i: 1

love:

2china:

1

首先想到的還是模擬的方法,就是用struct把出現過的單詞快取起來,然後再輸入文字中遍歷到新單詞的時候,遍歷一次struct,看這個單詞是不是已經存,做相關處理。

如果輸入文字中有n個字母,不重複的字母為m個, 則演算法複雜度為o(nm^2) 最好情況是m =1 ,最差情況是m=n 其實現**如下:

1

2#include

<

stdio.h

>

3#include

<

string

.h>

4struct

struct_words;

8int

main()

18puts(

"please input words.");

19gets(

string

);20

puts(

"**********===開始取詞***************=");

2122i =

0;23do

else

34i ++;

35}while

(c!='\0

');lda

3637

38puts(

"**********= 合併相同的單詞 **********====");

39for

(i =

0; words[i].word[0]

!='\0'

; i++)48

}49}50

51puts(

"*************** end **********====");

52for

(i =

0;words[i].word[0]

!='\0'

;i++)56

return(0

);57

}

然後呢,做一下優化,恩路是遍歷使用者的輸入文字是必須的,但是,單詞的快取和出現次數的統計是可以使用hash演算法來優化的,借用hash演算法的特性,使複雜度立刻就降低到了 o(n),實現**如下:

#include 

<

stdio.h

>

#include

<

string

.h>

#define

n 100

struct

struct_words;

inthash(

char

*key)

returnh&

n;}intmain()

puts(

"**********===輸入一些單詞,用空格隔開***************=");

gets(

string

);i =0

;doif(c !='

'&&c !='\0

')else

words[key].count

++;

ws =0;

}i ++;

}while

(c !='\0

');printf("%d

",k);

puts(

"***************列印結果 **********====");

for(i =0

; i

<

k ;i++)

puts(

"*************** end **********====");

return0;

}

呵呵,弄了近三個小時,發現linux下gdb不熟太痛苦了,加油!

統計字串中單詞的個數

一,問題描述 給定乙個字串,統計該字串中有多少個單詞。單詞以空格 回車 tab鍵 分隔。比如 i come from n china 有4個單詞。注意,字串不一定以字母開頭,也可以從空格開頭。二,實現思路 使用乙個 boolean iswhitespace用來標記當前字元所處的模式 比如,當前字元不...

java統計字串單詞的個數

在一些專案中可能需要對一段字串中的單詞進行統計,我在這裡寫了乙個簡單的demo,有需要的同學可以拿去看一下。本人沒怎麼寫個播客,如果有啥說的不對的地方,你來打我啊 不說廢話了直接貼 實現 統計各個單詞出現的次數 param text public static void findenglishnum...

Java 對字串中的每個單詞個數進行統計

這是來自一道電面的題。單詞統計很容易想到用map來統計,於是想到了用hashmap。但是我卻沒有想到用split來分割單詞,想著用遍歷字元的方式來判斷空格。人家面試官就說了,如果單詞之間不止乙個空格呢?其實遍歷的方法也是可以的,但是處理起來可能比較麻煩一點。也沒有什麼錯,畢竟我沒有用到輔助空間。既然...