[問題] 計算字串中 某個字元出現的個數

看板Python作者 (橘白Cat)時間6年前 (2017/07/13 12:16), 6年前編輯推噓6(6022)
留言28則, 9人參與, 最新討論串1/1
在online judge上遇到一個問題 要如何計算一個字串中某個字元出現的個數呢?(最簡便的做法) 限制:1.不能出現import敘述 2.不能出現for敘述 目前只有想到一個方法 但是會超過時間TLE a = "ehjdjredhhd" number_d = len(a) - len(a.replace("d","")) 還有其他更效率更pythonic的方法嗎? 我知道我這個方法太笨了 但是我還算是初學者 需要前輩指導 補充一下 online judge的編譯器是python2.x 目前試過的方法 a.count("d") len(a.split("d"))-1 map filter lambda結合 以上方法都會TLE ----- Sent from JPTT on my Asus ASUS_Z00UD. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.9.105.167 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1499919370.A.EB7.html ※ 編輯: LessonWang (39.9.105.167), 07/13/2017 12:23:28

07/13 12:24, , 1F
用 map 和 lambda 達成for 的效果
07/13 12:24, 1F
http://i.imgur.com/M0EAO85.jpg
s大提供的 我實作了也會TLE...

07/13 12:32, , 2F
目前報告
07/13 12:32, 2F

07/13 12:32, , 3F
原本我的方法 TLE
07/13 12:32, 3F

07/13 12:32, , 4F
字串的count方法 TLE
07/13 12:32, 4F
※ 編輯: LessonWang (39.9.105.167), 07/13/2017 12:41:22

07/13 13:01, , 5F
好像有模組可用
07/13 13:01, 5F

07/13 13:02, , 6F
啊,不能import
07/13 13:02, 6F
※ 編輯: LessonWang (39.9.105.167), 07/13/2017 13:07:44

07/13 14:54, , 7F
len(None for c in a if c == 'd') 呢
07/13 14:54, 7F
u大 不能有for關鍵字。 我好煩惱..

07/13 14:56, , 8F
啊這樣還要造個 list 太慢了
07/13 14:56, 8F
※ 編輯: LessonWang (39.9.105.167), 07/13/2017 14:56:56

07/13 14:56, , 9F
sum(1 for c in a if c == 'd') 應該是最快的
07/13 14:56, 9F

07/13 14:57, , 10F
它是不接受 for keyword 還是 for statement?
07/13 14:57, 10F
不接受含有for的一切敘述 ※ 編輯: LessonWang (39.9.105.167), 07/13/2017 15:00:08

07/13 15:02, , 11F
實驗了一下 map + filter 好像最快
07/13 15:02, 11F

07/13 15:02, , 12F
map(lambda _: 1, filter(lambda c: c == 'd', a))
07/13 15:02, 12F

07/13 15:03, , 13F
(上面外面還有一層 sum 我忘了寫)
07/13 15:03, 13F

07/13 15:03, , 14F
len(list(filter(lambda c: c == 'd', a))) 另一種
07/13 15:03, 14F

07/13 15:06, , 15F
如果是 Python 2 也可以試試 reduce 應該更快
07/13 15:06, 15F

07/13 15:08, , 16F
請問是哪個OJ呀?好挑喔뜠毽|不會是它自己主機跑太慢xD
07/13 15:08, 16F

07/13 15:08, , 17F
*會不會
07/13 15:08, 17F
這個oj別人介紹給我 然後其他編譯式語言都AC 就python沒半個人AC 都TLE xd

07/13 15:09, , 18F
不過 str.count 他都不吃其實就很怪了, 不太可能更快
07/13 15:09, 18F
u大 count已經是最直覺的方法了哈哈 他一樣給TLE 根本折磨人 我放棄了 換別的語言試試了 我也問過python Taiwan 的fb社團

07/13 15:12, , 19F
len(a.split("d"))-1
07/13 15:12, 19F

07/13 15:13, , 20F
我目前可以寫最短的XD
07/13 15:13, 20F
哈哈 我也有試過

07/13 15:26, , 21F
a.split("d").__len__()-1 這樣呢...
07/13 15:26, 21F

07/13 15:29, , 22F
哈,沒事,不要理我XD
07/13 15:29, 22F
※ 編輯: LessonWang (39.9.105.167), 07/13/2017 15:32:47 ※ 編輯: LessonWang (39.9.105.167), 07/13/2017 15:36:58 ※ 編輯: LessonWang (39.9.105.167), 07/13/2017 15:39:08

07/13 20:50, , 23F
如果大家都這樣就不要理他了啦, 根本平台有問題
07/13 20:50, 23F
對啊 放棄 ※ 編輯: LessonWang (39.9.105.167), 07/14/2017 00:22:14

07/16 10:45, , 24F
可以用recursive嗎 把字串重複分兩半 檢查單個字母是
07/16 10:45, 24F

07/16 10:45, , 25F
不是後回傳後加起來
07/16 10:45, 25F

07/18 22:42, , 26F
我只想問是哪個OJ,可能的話,給URL?
07/18 22:42, 26F
他那個oj是用java內嵌在web裡 我用原始程式碼抓不到 qq 似乎是不想讓題目外流還是怎樣的 ※ 編輯: LessonWang (39.12.35.170), 07/19/2017 13:13:31

07/19 21:59, , 27F
外面沒辦法連上去嗎?給我URL,我自己連可嗎?
07/19 21:59, 27F
他那個是個人的主機(ip位址那種) 不一定連的上去 是私人的oj ※ 編輯: LessonWang (27.246.75.220), 07/20/2017 09:25:29

07/21 08:39, , 28F
了解,謝謝回應
07/21 08:39, 28F
文章代碼(AID): #1PPlGAwt (Python)