public Alphabet(String alphabet) { this._alphabet = alphabet.ToCharArray(); (Int32 minValue, Int32 maxValue) = this.CalculateBounds(this._alphabet); { (Boolean containsDuplicate, Char duplicatedChar) = this.ContainsDuplicate(this._alphabet, minValue, maxValue); if (containsDuplicate) { throw new InvalidOperationException("Illegal alphabet: repeated character = '" + duplicatedChar + "'"); } } this._index = new AlphabetCompactIndex(minValue, maxValue); for (int i = 0; i < this._index.Length; i++) { this._index[i] = -1; } for (int i = 0; i < this._alphabet.Length; i++) { this._index[this._alphabet[i]] = i; } this.Radix = alphabet.Length; this.BinaryLogRadix = this.CalculateBinaryLogRadix(alphabet.Length); this.MinChar = (Char)minValue; this.MaxChar = (Char)maxValue; }
public Alphabet(Int32 radix) { this._alphabet = new Char[radix]; this._index = new AlphabetCompactIndex(0, radix - 1); for (int i = 0; i < radix; i++) { this._alphabet[i] = (Char)i; this._index[i] = i; } this.Radix = radix; this.BinaryLogRadix = this.CalculateBinaryLogRadix(radix); this.MinChar = (Char)0; this.MaxChar = (Char)(radix - 1); }