亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

哈希表:勒索票據 hackerrank

哈希表:勒索票據 hackerrank

jeck貓 2023-11-10 16:35:04
哈羅德是一名綁匪,他寫了一張勒索信,但現在他擔心通過他的筆跡可以追溯到他。他找到了一本雜志,想知道是否可以從其中剪下整個單詞,并用它們來制作一份無法追蹤的勒索信復制品。他的筆記中的單詞區分大小寫,并且他必須僅使用雜志中可用的完整單詞。他無法使用子字符串或連接來創建他需要的單詞。給定雜志中的文字和勒索信中的文字,如果他可以使用雜志中的整個單詞準確地復制勒索信,請打印“是”;否則,打印編號。例如,注釋是“黎明襲擊”。該雜志只收錄了《黎明的襲擊》。該雜志的用詞全部正確,但有一個大小寫不匹配的地方。答案是 。樣本輸入06 4 今天晚上給我一盛 今天晚上給我一盛 示例輸出 0是 樣本輸入 16 5 二乘三不等于四 二乘二等于四 樣本輸出 1不我的代碼 5/22 測試用例失敗:(我不明白為什么 5 失敗了。static void checkMagazine(String[] magazine, String[] note) {    int flag = 1;    Map<String, Integer> wordMap = new HashMap<>();    for(String word: magazine) {        if(!wordMap.containsKey(word)) {            wordMap.put(word, 1);        } else            wordMap.put(word,wordMap.get(word)+1);    }    for(String word: note){        if(!wordMap.containsKey(word)){            flag = 0;            break;        }             else wordMap.remove(word, wordMap.get(word));           }    if(flag == 0)        System.out.println("No");    else      System.out.println("Yes");}
查看完整描述

4 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

這可能是因為當您檢索一本雜志時,您不是減少雜志中的單詞計數,而是完全刪除該單詞的所有計數。嘗試這個:


for(String word: note){

    if(!(wordMap.containsKey(word) && wordMap.get(word) > 0)){

        flag = 0;

        break;

    } 

    else wordMap.put(word, wordMap.get(word)-1);       

}


查看完整回答
反對 回復 2023-11-10
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

wordMap是一個頻率表并給出字數。但是,對于注釋中的每個單詞,您必須減少字數,而不是完全刪除該條目。只有當字數達到 0 時才能刪除該條目。


另一個問題是區分大小寫。根據要求,您可能需要將所有單詞轉換為小寫。


        else {

            wordMap.computeIfPresent(word, (k, v) -> v <= 1? null : v - 1);       

        }

這會檢查舊值是否v大于 1,然后減小它,否則返回空值,表示刪除該條目。


可以進行頻率計數:


Map<String, Integer> wordMap = new HashMap<>();

for(String word: magazine) {

    wordMap.merge(word, 1, Integer::sum);

}


查看完整回答
反對 回復 2023-11-10
?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

我認為,這個實現更簡單


static boolean checkMagazine(String[] magazine, String[] note) {

    List<String> magazineCopy = new ArrayList<>(Arrays.asList(magazine));


    for (String word : note)

    {

        if (magazineCopy.contains(word)) {

            magazineCopy.remove(word);

            continue;

        }

        return false;

    }

    return true;

}

我想你的錯誤在這里:


else wordMap.remove(word, wordMap.get(word));

您正在從地圖中刪除該單詞,而不是減少此類單詞的數量,并且只有當數量達到 0 時,您才應該從地圖中刪除該單詞。


查看完整回答
反對 回復 2023-11-10
?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

Python解決方案


def checkMagazine(magazine, ransom):

    magazine.sort()

    ransom.sort()

    for word in ransom:

        if word not in magazine:

            flag = False

            break

        else:

            magazine.remove(word)

        flag = True


    if (flag):

        print("Yes")

    else:

        print("No")


查看完整回答
反對 回復 2023-11-10
  • 4 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號