C语言 此语法数组是否为数组中的数组?

6jjcrrmo  于 2023-01-01  发布在  其他
关注(0)|答案(2)|浏览(154)

下面的代码片段从Leetcode。给定的练习是找到最长的子字符串没有重复字符。我试图理解的逻辑从有人已经张贴的解决方案
我下面的问题是
1.我有cnts是数组。这个数组在数组cnt[s[j]]cnt[s[j]]++里面吗?它是如何工作的,请帮助解释。我试着用这个可视化代码执行
我已经尝试理解下面的代码行。我尝试使用

可视化代码执行

#include <stdio.h>

int lengthOfLongestSubstring(char * s)
{
    if (s[0] == '\0')
        return 0;
    if (s[1] == '\0')
        return 1;
    
    int i,  j, len, max = 0;
    int cnt[255] = {0}; // array of counter
    //memset(cnt,0,sizeof(cnt));
    for (i=0; s[i]!=0; i++)
    {
        len = 0;
        for (j=i; s[j]!=0; j++)
        {  
            if (cnt[s[j]] == 0)          /* What does this mean since cnt and s both are array? is this called array inside array ? */
            {
                printf("iteration %d  %c\n",j,s[j]);
                cnt[s[j]]++;
                len++;
            }
            else
            { /* if character are not equal */
                break;
            }
        }
        if (len > max)
            max = len;
    }
    return max;
}

int main()
{
    char string1[] = "abcabcbb";
    printf("%d",lengthOfLongestSubstring(string1));
    return 0;
}
ymzxtsji

ymzxtsji1#

语法a[b[i]]表示b[i]中的值引用要读取的a中的索引。
所以如果你有int a[] = { 10, 100, 1000, 10000, 100000}; int b[] = { 3, 2, 1, 0};,那么a[b[0]]会解析为a[3],它的值是10000
请注意,这要求b只具有作为a的有效索引的值。

93ze6v8z

93ze6v8z2#

它不是一个数组中的数组,它是用一个数组把下标放到另一个数组中。
当你看到一个你不理解的复杂表达式时,把它分解成简单的表达式。

cnt[s[j]]++;

大致相当于

int charcode = s[j];
cnt[charcode]++;

s是一个字符串,所以s[j]包含一个字符代码,所以这将递增cnt中与该字符代码对应的元素,最终结果是每个字符的频率计数。

相关问题