1. Использование массива символов:
public String reverseString(String inputString) {
char[] inputStringArray = inputString.toCharArray();
String reverseString = "";
for (int i = inputStringArray.length - 1; i >= 0; i--) {
reverseString += inputStringArray[i];
}
return reverseString;
}
2. Использование StringBuilder:
public String reverseString(String inputString) {
StringBuilder stringBuilder = new StringBuilder(inputString);
stringBuilder = stringBuilder.reverse();
return stringBuilder.toString();
}
ИЛИ
return new StringBuilder(inputString).reverse().toString();
ZLib всегда к вашим услугам - у нее очень мало накладных расходов для случаев, когда строка содержит несжимаемые данные, она относительно быстра, бесплатна и может быть легко интегрирована в C и C ++ программы.
Я не уверен, что методы сжатия zlib или LZW будут работать хорошо в случае индивидуального сжатия коротких строк размером менее 250 байт. Оба, как правило, требуют создания довольно большого словаря до того, как будет замечен значительный выигрыш от сжатия.
Может быть, простое кодирование Хаффмана с фиксированным деревом кодирования или общее для всех экземпляров строк? Кроме того, вы видели кодировку ZSCII, используемую для сжатия коротких строк на микрокомпьютерах с ограниченным объемом памяти в 80-х?
Zlib определенно ваш друг, но обязательно выполните несколько тестов, чтобы определить среднюю длину строки, при которой сжатие начинает приносить пользу из-за небольших накладных расходов на заголовки сжатия.
Например, вы можете обнаружить, что меньше 20 символов, сжатая строка на самом деле больше, и поэтому сжимаются только более длинные строки.
Зачем использовать длину 4 байта, когда длина строки составляет 10–250 байтов, используйте длину 1 байт, которая сэкономит вам 3 байта на одну строку.
Являются ли данные только текстовыми, то есть 0-9 Az или какой-то подмножество ?? если это так, перекодируйте его, чтобы использовать это подмножество и сохранить несколько бит на символ.
Теперь посмотрите http://gnosis.cx/publish/programming/compression_primer.html в Хаффмане раздел кодирования и раздел lempel-zev.
Это должно помочь вам начать работу.
Большинство алгоритмов сжатия не очень хорошо работают с короткими строками. Вот несколько алгоритмов сжатия, предназначенных для сжатия коротких текстовых строк на английском языке. Хотя они могут обрабатывать любой произвольный байт в строке открытого текста, такие байты часто делают «сжатые» данные длиннее, чем открытый текст. Поэтому для компрессора рекомендуется хранить «несжимаемые» данные без изменений и устанавливать «буквальный» флаг для таких данных (как предложил Стив Джессоп).