这是Hackkerrank程序解决方案的一部分。
int distinct_chars(const char *a)
{
int dist = 0;
while (*a != '\0') {
if (!strchr(a + 1, *a))
dist++;
a++;
}
return dist;
}
请解释一下。
答案 0 :(得分:1)
外部循环遍历给定的输入字符串,并一次将指针a
前进一个字符。对strchr
的内部调用在字符串的其余部分(a
)中搜索当前由a+1
指向的字符。如果那产生一个空指针,则找不到该字符,并且*a
处的字符被计为'distinct'。
我确实相信名称已关闭,例如在字符串“ ABCDEFAX”中,即使已经有一个A,第二个A也将被标记为“ distinct”。
答案 1 :(得分:0)
虽然循环检查行尾(\ 0), 内部-搜索数组中的第一个字符,如果没有出现,则将+1赋予dist。接下来,转到字符串的第二个字符,然后再次执行。 如果数组的所有字符都不相同,则将获得dist的最大值。
答案 2 :(得分:0)
在每次迭代中,strchar将使用唯一字符进行检查,如果char是唯一的,则“ dist”变量将随着计数器1增大。