下面的代码片段从Leetcode。给定的练习是找到最长的子字符串没有重复字符。我试图理解的逻辑从有人已经张贴的解决方案
我下面的问题是
1.我有cnt
和s
是数组。这个数组在数组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;
}
2条答案
按热度按时间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
的有效索引的值。93ze6v8z2#
它不是一个数组中的数组,它是用一个数组把下标放到另一个数组中。
当你看到一个你不理解的复杂表达式时,把它分解成简单的表达式。
大致相当于
s
是一个字符串,所以s[j]
包含一个字符代码,所以这将递增cnt
中与该字符代码对应的元素,最终结果是每个字符的频率计数。