longestCommonKeyPrefixByKeyPrefix method
Find the longest common key prefix for all keys prefixed by prefix.
final set = ternarytreap.TTSet.fromIterable([
'test',
'testOne',
'frog',
'testTwo',
'testThree',
'testThreeandfour'
]);
print(set.longestCommonKeyPrefixByKeyPrefix('t'));
print(set.longestCommonKeyPrefixByKeyPrefix('te'));
print(set.longestCommonKeyPrefixByKeyPrefix('tes'));
print(set.longestCommonKeyPrefixByKeyPrefix('test'));
print(set.longestCommonKeyPrefixByKeyPrefix('testT'));
print(set.longestCommonKeyPrefixByKeyPrefix('testTw'));
print(set.longestCommonKeyPrefixByKeyPrefix('testTh'));
print(set.longestCommonKeyPrefixByKeyPrefix('testThree'));
print(set.longestCommonKeyPrefixByKeyPrefix('testThreea'));
print(set.longestCommonKeyPrefixByKeyPrefix('f'));
print(set.longestCommonKeyPrefixByKeyPrefix('testO'));
print(set.longestCommonKeyPrefixByKeyPrefix(''));
test
test
test
test
testT
testTwo
testThree
testThree
testThreeandfour
frog
testOne
Implementation
@override
String longestCommonKeyPrefixByKeyPrefix(String prefix) {
final key = _mapKey(prefix);
final root = _root;
if (identical(root, null) || key.isEmpty) {
return '';
}
final keyRunes = key.runes.toList();
final searchResult = root.getClosestPrefixDescendant(keyRunes);
if (!searchResult.isPrefixMatch) {
return '';
}
return String.fromCharCodes(
searchResult.prefixRuneIdx > searchResult.nodeRuneIdx
? [
...(keyRunes.slice(
0, searchResult.prefixRuneIdx - searchResult.nodeRuneIdx)),
...searchResult.node.runes
]
: searchResult.node.runes);
}