寻求帮助解释 var[x[n]] 的语法

Seeking helps in explanation of syntax for var[x[n]]

下面的语法是如何工作的?

class Solution {

    public:

        int lengthOfLongestSubstring(string s) {
            const int n = s.length();
            int ans = 0; // Set a variable as the answer;
            for(int i = 0; i < n; ++i) {
                vector <int> seen(128);
                int j = i;
                while(j < n && !seen[s[j]]) <---- Here
                    seen[s[j++]] = 1;       <---- Here

                ans = max(ans, j - i);      <---- Here
            }
            return ans;
        }
};

语法!seen[s[j]]是什么意思? seen[s[j++]]=1.

也一样

还有,为什么i可以减去j

s[j]std::string s 中索引 j 处的字符。 seen[s[j]]std::vector<int> seen.

中索引 s[j] 处的元素

如果seen[s[j]]0seen[s[j]]会returnfalse,所以!seen[s[j]]会returntrue.如果 seen[s[j]] 是一个非零值,seen[s[j]] 将 return true,因此 !seen[s[j]] 将 return false.

seen[s[j++]]=1;seen[s[j]] 的值设置为 1,然后递增 j

ans = std::max(ans, j - i);std::max(ans, j - i) 将 return ansj - i 之间较大的值,然后将该值赋给 ans

案例一

s[j]

以上表示名为s.

的字符串的索引j处的元素

案例二

seen[s[j]]

以上表示名为seen.

的变量索引s[j]处的元素

案例三

seen[s[j++]] = 1;

对于以上内容,您必须了解 post-增量运算符。假设我们有:

int var = 0;
std::cout << var++ <<std::end; // This will print 0

var++ 中的 ++ 表示我们将 var 的值递增 1,因此它现在变为 1,但是 var++ return s 变量的旧值 var 这就是我们得到 0 作为输出的原因。

现在让我们回到:

seen[s[j++]]=1;

以上表示名为seen的变量的索引s[j++]处的元素。但请注意 j++ 会做两件事:首先 它将 j 递增 1,其次 它将 return j 的旧值。所以 s[j++] 本质上意味着名为 s 的字符串的索引 j 处的元素,同时 j 的值也递增 1。因此,作为一个整体,您正在分配为名为 seen 的变量的索引 s[j] 处的元素赋值为 1,同时还将 j 的值递增 1。

Why can i be subtracted by j?

这是因为 j 的值在 while 循环中增加了 1。