C语言 | Leetcode C语言题解之第139题单词拆分

题目:

题解:

cpp 复制代码
unsigned long long Hash(char* s, int l, int r) {
    unsigned long long value = 0;
    for (int i = l; i < r; i++) {
        value = value * 2333ull;
        value += s[i] - 'a' + 1;
    }
    return value;
}
bool query(unsigned long long* rec, int len_rec, unsigned long long x) {
    for (int i = 0; i < len_rec; i++) {
        if (rec[i] == x) return true;
    }
    return false;
}
bool wordBreak(char* s, char** wordDict, int wordDictSize) {
    unsigned long long rec[wordDictSize + 1];
    for (int i = 0; i < wordDictSize; i++) {
        rec[i] = Hash(wordDict[i], 0, strlen(wordDict[i]));
    }
    int len_s = strlen(s);
    bool dp[len_s + 1];
    memset(dp, 0, sizeof(dp));
    dp[0] = true;
    for (int i = 1; i <= len_s; i++) {
        for (int j = 0; j < i; j++) {
            if (dp[j] && query(rec, wordDictSize, Hash(s, j, i))) {
                dp[i] = true;
                break;
            }
        }
    }
    return dp[len_s];
}
相关推荐
土司大王4 小时前
LeetCode hot100——缺失的第一个正数
数据结构·算法·leetcode
布莱克6054 小时前
strcpy 函数详解:作用、用法与安全缺陷
c语言·开发语言·c++·安全
Cccp.1234 小时前
【leetcode】(二)认识O(NlogN)的排序
算法·leetcode
DDXYcoder4 小时前
内存函数与数据存储
c语言
鹿角片ljp5 小时前
LeetCode 56:合并区间复盘|从排序思维到 List<int[]> 的简洁写法
算法·leetcode·list
AAA代码批发商5 小时前
Days37 Linux C 网络编程:UDP、TCP 与 HTTP 协议实战详解
linux·c语言·网络
玖玥拾6 小时前
LeetCode 205 同构字符串
算法·leetcode
是隼人6 小时前
buuctf-pwn ciscn_2019_n_5题解(学习过程持续 更新)
c语言·学习·安全·pwn入门·ctf入门
_不会dp不改名_9 小时前
leetcode3875_构造奇偶一致的数组 I
leetcode
水饺编程9 小时前
第5章,[Win32 章节] :练习程序,BigFontPic
c语言·c++·windows·visual studio