日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 2135. 统计追加字母可以获得的单词数(位运算+哈希)

發布時間:2024/7/5 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 2135. 统计追加字母可以获得的单词数(位运算+哈希) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給你兩個下標從 0 開始的字符串數組 startWords 和 targetWords 。每個字符串都僅由 小寫英文字母 組成。

對于 targetWords 中的每個字符串,檢查是否能夠從 startWords 中選出一個字符串,執行一次 轉換操作 ,得到的結果與當前 targetWords 字符串相等。

轉換操作 如下面兩步所述:

  • 追加 任何 不存在 于當前字符串的任一小寫字母到當前字符串的末尾。
    例如,如果字符串為 “abc” ,那么字母 ‘d’、‘e’ 或 ‘y’ 都可以加到該字符串末尾,但 ‘a’ 就不行。如果追加的是 ‘d’ ,那么結果字符串為 “abcd” 。
  • 重排 新字符串中的字母,可以按 任意 順序重新排布字母。
    例如,“abcd” 可以重排為 “acbd”、“bacd”、“cbda”,以此類推。注意,它也可以重排為 “abcd” 自身。

找出 targetWords 中有多少字符串能夠由 startWords 中的 任一 字符串執行上述轉換操作獲得。返回 targetWords 中這類 字符串的數目 。

注意:你僅能驗證 targetWords 中的字符串是否可以由 startWords 中的某個字符串經執行操作獲得。startWords 中的字符串在這一過程中 不 發生實際變更。

示例 1: 輸入:startWords = ["ant","act","tack"], targetWords = ["tack","act","acti"] 輸出:2 解釋: - 為了形成 targetWords[0] = "tack" ,可以選用 startWords[1] = "act" ,追加字母 'k' ,并重排 "actk""tack"- startWords 中不存在可以用于獲得 targetWords[1] = "act" 的字符串。注意 "act" 確實存在于 startWords ,但是 必須 在重排前給這個字符串追加一個字母。 - 為了形成 targetWords[2] = "acti" ,可以選用 startWords[1] = "act" ,追加字母 'i' ,并重排 "acti""acti" 自身。示例 2: 輸入:startWords = ["ab","a"], targetWords = ["abc","abcd"] 輸出:1 解釋: - 為了形成 targetWords[0] = "abc" ,可以選用 startWords[0] = "ab" ,追加字母 'c' ,并重排為 "abc"- startWords 中不存在可以用于獲得 targetWords[1] = "abcd" 的字符串。提示: 1 <= startWords.length, targetWords.length <= 5 * 10^4 1 <= startWords[i].length, targetWords[j].length <= 26 startWords 和 targetWords 中的每個字符串都僅由小寫英文字母組成 在 startWords 或 targetWords 的任一字符串中,每個字母至多出現一次

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/count-words-obtained-after-adding-a-letter
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 將 startwords 里的單詞轉成 26 位 int 數字,再添加一個不存在的 bit 進去,所有的情況存到 哈希 里
  • 遍歷 targetword 里的單詞轉成 int ,在哈希里能查到就可以轉換
class Solution { public:int wordCount(vector<string>& startWords, vector<string>& targetWords) {unordered_set<int> set;for(auto& s : startWords){int num = 0;for(auto c : s)num |= 1<<(c-'a');for(int i = 0; i < 26; ++i){if((num&(1<<i))==0)//添加了不存在的字母{set.insert(num | (1<<i));}}}int ans = 0;for(auto& s : targetWords){int num = 0;for(auto c : s)num |= 1<<(c-'a');if(set.find(num) != set.end())ans++;}return ans;} };

460 ms 151.5 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LeetCode 2135. 统计追加字母可以获得的单词数(位运算+哈希)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。