【发布时间】:2021-02-17 23:41:28
【问题描述】:
所以这是 leetcode 的一个问题,我遇到了一些问题。我已经看到解决这个问题的代码发布到 leetcode 的讨论部分,但我想知道是否有人可以帮助我解决它我已经写了一些代码..这是问题所在:
给你一个字符串
allowed,由不同的字符和 字符串数组words。如果字符串中的所有字符都是一致的 该字符串出现在字符串allowed中。返回数量 数组单词中的一致字符串。示例:
输入:allowed = "ab",words => ["ad","bd","aaab","baa","badab"]输出:2
解释:字符串“aaab”和“baa”是一致的,因为它们只 包含字符“a”和“b”。
到目前为止,这是我的代码:
注意:允许包含单个字符串
#include <string.h>
int countConsistentStrings(char * allowed, char ** words, int wordsSize){
int real_count = 0;
for(int i = 0; i < wordsSize; i++)
{
for(int j = 0; j < strlen(allowed); j++)
{
for(int k = 0; k < strlen(words[i]); k++)
{
if(words[i][k] != allowed[j])
{
// stuff goes here?
}
}
}
}
return real_count;
}
我能够逐个字符地遍历数组中的字符串,并将它们与允许的字符进行比较......但我真的不知道从那里去哪里。我尝试过记录东西并使用比较,但后来我遇到了 words[i] 是否小于 strlen(allowed) 或反之亦然的问题..
我知道可能有更简单的方法来解决这个问题(正如我在 leetcode 的讨论部分中看到的那样),但我想知道是否有任何方法可以使用我已经完成的方法来解决它?
感谢任何可以帮助我解决这个问题的人......我觉得我“几乎”解决了这个问题,但我也被困了很长一段时间,所以我准备好接受任何解释我可以得到。
【问题讨论】:
-
allowed有单个字吗?或者,它可以有 多个 单词用空格分隔吗?你能用strcmp等吗? 旁注:for(int j = 0; j < strlen(allowed); j++)(例如)非常慢(O(n^2) 而不是 O(n))。更好的做法:for(int j = 0, len = strlen(allowed); j < len; j++) -
allowed 由一个字符串组成。我会编辑这个问题,这样就清楚了。我的循环是否会是 n^2,因为它每次都必须遍历 strlen(allowed) 才能获得值?
-
如果
allowed中只有 一个 字[并且我假设它有 no 其他空格],你只能返回一个 [ boolean] 值:(例如)1=match, 0=nomatch???这假设给定字符串 only 在words中一次(即words条目是唯一的)。如果words可以 重复一个字符串,则返回匹配words条目数的count。如果它们是唯一的,如果你找到第一个匹配项,你可以break退出循环(即它更快——对于像 leetcode 这样的网站来说总是一件好事)。否则,您必须遍历 allwords条目?你要哪个?