阅读 72

524. 通过删除字母匹配到字典里最长单词

题目描述

给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。

如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。

示例

示例 1:
输入:s = "abpcplea", dictionary = ["ale","apple","monkey","plea"]
输出:"apple"

来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/lo…

实现

void checkWord(char *s, char *res, int *len, char *d)
{
    if (strlen(s) < strlen(d)) {
        return;
    }
    int ps = 0;
    int pd = 0;

    while (ps < strlen(s) && pd < strlen(d)) {
        if (s[ps] != d[pd]) {
            ps++;
        } else {
            ps++;
            pd++;
        }
    }
    if (pd >= strlen(d)) {
        if (strlen(d) > *len) {
            *len = strlen(d);
            memset(res, 0, 1001);
            strcpy(res, d);
        }
        if (strlen(d) == *len && strcmp(d, res) < 0) {    // 长度一样,比较字典序
            *len = strlen(d);
            memset(res, 0, 1001);
            strcpy(res, d);
        }
    }
    return;
}

char *findLongestWord(char *s, char **d, int dSize)
{
    int tmpLen = 0;
    char *res = (char*)malloc(sizeof(char) * 1001);   // 存放最后的结果
    memset(res, 0, 1001);
    for (int i = 0; i < dSize; i++) {                 // 遍历d中的每一个字符串
        checkWord(s, res, &tmpLen, d[i]);              // 判断d中每一个字符串是否符合条件,如果符合,则检测其长度,如果最长则保存到res中
    }
    return res;
}
复制代码
文章分类
后端
文章标签