问题描述
所以我有一个由N个字母“ a”或“ b”组成的字符串S。 如果所有出现的A都在所有出现的b之前,则应返回1,否则返回0。
B不必在S中出现,A不需要在S中出现
例如
S='aabbb' returns 1
S = 'ba' returns 0
S = 'aaa' returns 1
S= 'b' returns 1
所以我的方法是在字符串上使用for循环,然后检查b是否出现在a之前或不这样:
char newstr[10] = "aabbba"; //should return 0
int len = strlen(newstr);
for (int i = 0; i < len+1; i++) {
printf("%c",newstr[i]);
if (newstr[i] < 'b') {
printf("1");
}
else {
printf("0");
}
}
输出为a1a1b0b0b0a1 1
。..它部分检测a是否在b之前,但不是完全正确。
解决方法
i有一个由N个字母“ a”或“ b”组成的字符串S
如果A的所有出现都早于b的所有出现,则应返回1,否则应返回0。
因此,不允许在字符串内部包含序列ba
。所以就这样:
if (strstr(newstr,"ba") == NULL) { printf("1\n"); } else { printf("0\n"); }
或者只是:
printf("%d\n",!strstr(newstr,"ba"));
,
您的代码只是在检测a
而未检查与b
的关系。
条件“如果A的所有出现都在b的所有出现之前,则应返回1,否则返回0。”可以说为“如果在某项b中出现了一些之后,一些,并且应该返回 1 ,则返回 0 >否则。”
此示例实现为:
char newstr[10] = "aabbba";
int b_found = 0;
int result = 1;
for (int i = 0; newstr[i] != '\0'; i++) {
if (newstr[i] == 'b') {
b_found = 1;
} else if(b_found && newstr[i] == 'a') {
/* 'a' is found after 'b' */
result = 0;
}
}
printf("%d",result);