longestCommonKeyPrefixByKeyPrefix method

  1. @override
String longestCommonKeyPrefixByKeyPrefix(
  1. String prefix
)
inherited

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);
}