1
我有一個難題,玩家需要使用現有的9個字母單詞的字母來製作儘可能多的單詞。假設你有「瀑布」。以字母和重新排列你可以使晶圓,缺陷,左等。正則表達式來找到由字母集合組成的單詞
目前,我使用看起來像這樣我的單詞列表上的表達式:
^(?:([waterfall])(?!.*?1)){1,9}$
但問題是,這也允許只出現一次,信件使用兩次,像免費(三個Es)和破爛(三個Ts)。
截至目前,我只是迭代我的單詞列表和計算字母,確保建議的單詞不包含每個字母比我的原始單詞更高的計數。但是這似乎有點令人厭煩,我的直覺告訴我應該可以確保表達式實際上只使用每個字母一次(或兩次,如L,如果它在原始單詞中兩次)。
我已經瀏覽過文檔,但對我而言,這些都很希望,並且想知道可愛的堆垛機是否有建議。
才澄清:'[瀑布]'不會查找單詞'waterfall'而是允許字符類的一個字母。它甚至可以被重寫爲'[aeflrtw]'並且允許相同的單詞(這很遺憾並不能解決你的問題,儘管:=))你正在尋找的是** **排列。 – Jan
你使用哪種正則表達方言? – bwoebi
我不認爲正則表達式是一個合適的解決方案 - 你必須檢查每個字母的正確數量在一個單獨的lookahead,像['^(?!(。* w){2})(?!( * A){3})(?!(。* T){2})(?!(。* E){2})(?!(。* R){2})(?!(。* f){2})(?!(。* l){3})[waterfl] + $'](https://regex101.com/r/fW3rK4/1)。 –