我正在阅读有关检查Trie数据结构的搜索函数的信息,但我不明白为什么代码减去字符a来获取索引。谁能帮忙?提前感谢!
// Returns true if key presents in trie, else false
static boolean search(String key)
{
int level;
int length = key.length();
int index;
TrieNode pCrawl = root;
for (level = 0; level < length; level++)
{
index = key.charAt(level) - 'a';
if (pCrawl.children[index] == null)
return false;
pCrawl = pCrawl.children[index];
}
return (pCrawl != null && pCrawl.isEndOfWord);
}
假设key
只包含小写英文字母,key.charAt(i) = 'a'
将每个小写字母映射到 0(对于 'a'(和 25(对于 'z'(之间的索引。
children
数组的长度可能为 26,该数组的每个元素对应于"a"和"z"之间的后者。
在java中,每当我们从另一个字符中减去一个字符时,它都会将两个字符转换为ascii代码并返回它们的减法,例如:- a的ascii代码是97,b的ascii代码是98('b' - 'a'(将返回1
在您的代码中,当您在此方法中传递字符串时,它将从字符串的每个字符中返回减去"a">
char
变量实际上是积分的,反映了相应字符的 Unicode 值。 因此,'a'
实际上是97
; 'b'
是98
等。从字符中减去 97 会将 'a'
到 'z'
之间的字符转换为 0
到 25
之间的数字。