题目描述
给你一个字符串 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;
}