有人可以解释一下runner.children[c-'a']
表示以下代码。
public boolean search(String word) {
TrieNode runner = root;
for(char c : word.toCharArray()) {
if(runner.children[c-'a'] == null) {
return false;
} else {
runner = runner.children[c-'a'];
}
}
return runner.isEndOfWord;
}
答案 0 :(得分:2)
每个char
都有一个数值,请查看the ASCII table以获取更多信息。
因此,假设变量c
包含字符 b ,并从中减去字符 a ,您将获得 1 你的答案。
答案 1 :(得分:1)
那只是减法。您可以减去字符,就好像它们是数字一样。最终得到减去字符代码的结果。 'c' - 'a'
(例如)等于2,因为'a'
比'c'
少2。
答案 2 :(得分:1)
-
是减法运算符。
换句话说,c
和'a'
都属于char
类型(UTF-16代码单元,范围从Character.MIN_VALUE到{{3} })。由于减法,它们被加宽为int
,并减去,从而产生int
类型的值。
想想数字行上的字符。减法是指从一个角色到另一个角色的距离。通过'a'
的恒定引用,'a'
,'b'
,... 'z'
的距离为0,1,...... 25.这仅对某些短段有意义。 UTF-16号码线。
数组是基于0的,因此像这样移动比例允许使用字符来索引数组,而不会使用大量使用的部分,其元素对应于未使用的字符。
(注意:有些人说ASCII是因为他们认为在学习正确的东西的过程中更容易理解一个更简单,更错误的东西。)
答案 3 :(得分:0)
在这种情况下,children []可能是a-z中字母数量的大小。
上面发生的是他们取charc的ascii值,并减去' a'的ascii代码。有效地导致获得字母表中的char c的索引(假设为0-Index)
设c =' b'
[c-'a'] = 98 - 97 = 1 (Ascii of b - Ascii of a)
使用c =' d'
[c-'a'] = 100 - 97 = 3
答案 4 :(得分:0)
是minus
符号而不是连字符。在java中,char占用2个字节的空间。 char表示从00000000到11111111的位,最高有效位作为有符号位读取。您可以通过将char赋值给int变量来轻松地将其读作数字(因为int可以接受4个字节,因此2个字节的char可以很容易地适合)。
char charA = ''A'; // represents 65
char charB = `B`; // represents 66
int diff = charB - charA; // this will represent 66-65 i.e. 1
数组的索引是positve int,因此它也可以接受像
这样的值anyTypeArray[charB - charA] //represents the 2nd element (index starts from 0 for arrays in java).
anyTypeArray['C' - charA] // represents the 3rd element of the array
另外,我喜欢上面https://stackoverflow.com/a/47106997/504133的回答,并希望添加其链接以扩展我的答案。