c语言leetcode

img

为什么写成s[j]==‘0’才行。s[j]==0 不行?
为什么score是局部变量,写在函数里运行就成功了?

s是字符指针,自然不能用int赋值

【以下回答由 GPT 生成】

问题优化后描述正确。下面是关于这两个问题的解答:

问题1:为什么写成s[j] == '0'才行。s[j] == 0 不行?

回答1:在C语言中,字符 '0' 表示字符型的数字0,而整数0表示整型的数字0。在条件判断语句中,使用双等号(==)进行比较。当你写成 s[j] == '0' 时,表示判断字符串s中第j个字符是否等于字符型的数字0,如果相等则条件成立。而当你写成 s[j] == 0 时,表示判断字符串s中第j个字符是否等于整型的数字0,这就涉及到字符型和整型的比较,因此结果可能不是你期望的。

以字符串s为例,当你需要判断s[j]是否为字符型的数字0时,使用 s[j] == '0' 是正确的写法。如果你要判断s[j]是否为整型的数字0,应该使用 s[j] - '0' == 0,其中减法操作将字符型的数字0转换为整型的数字0,然后再与整型的数字0进行比较。

问题2:为什么score是局部变量,写在函数里运行就成功了?

回答2:在C语言中,变量的作用域可以分为全局变量和局部变量。全局变量可以在程序的任何地方访问,而局部变量只能在定义它的代码块内部访问。局部变量在定义时会在内存中分配空间,当它所在的代码块执行结束后,这些内存空间会被释放。

在你提到的情况中,将score定义为局部变量是正确的做法。这是因为你可能在函数中需要使用一个存储计算结果的变量,而这个变量只在函数内部使用,并且不会对其他部分产生影响。将score定义为局部变量可以使代码更清晰、易读,并且能够避免变量名冲突的问题。

总结:以上是对你提出的问题的解答。如果你还有其他问题或需要进一步的解释,请随时告诉我。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

因为 s 是字符串,s[j] 是字符 ‘0’ 或 ‘1’,不是数值 0 或 1,score 要在for( ) 循环里复位,修改如下,改动处见注释,供参考:

#include <stdio.h>
#define Max(a, b) ((a) > (b) ? (a) : (b)) // 修改
int maxScore(char *s)
{
    int max = 0, score;
    for (int i = 0; s[i] != '\0'; i++)  // 修改
    {
        score = 0;                      // 修改
        for (int j = 0; j < i; j++){
            if (s[j] == '0')
                score++;
        }
        for (int j = i; s[j] != '\0'; j++){ // 修改
            if (s[j] == '1')
                score++;
        }
        max = Max(max, score);
    }
    return max;
}