private static int getCommonPrefixSize(List<GTreeNode> list) {
		GTreeNode node = list.get(0);
		String first = node.getName();
		int inCommonSize = first.length();
		for (int i = 1; i < list.size(); i++) {
			String next = list.get(i).getName();
			inCommonSize = Math.min(inCommonSize, getCommonPrefixSize(first, next, inCommonSize));
		}
		return inCommonSize;
	}
This is the algorithm for partitioning a list of nodes into a hierarchical structure based
on common prefixes 
@param nodeList the list of nodes to be partitioned
@param maxGroupSize the maximum number of nodes in a group before an organization is attempted
@param monitor {@link TaskMonitor} so the operation can be cancelled
@return a map of common prefixes to lists of nodes that have that common prefix. Returns null
if the size is less than maxGroupSize or the partition didn't reduce the number of nodes
@throws CancelledException if the operation was cancelled
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/OrganizationNode.java