寻求帮助解释 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]]
是0
,seen[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 ans
和 j - 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。
下面的语法是如何工作的?
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]]
是0
,seen[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 ans
和 j - 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 byj
?
这是因为 j
的值在 while 循环中增加了 1。