Я написал фрагмент кода, который сжимает строки нецифровых символов. например, «aabccccaaa» будет сжиматься до a2b1c4a3. Мне было интересно, способ, которым я достигаю этого, имеет эффективную асимптотику времени выполнения. Есть ли более эффективный способ достижения?Сжатие строк в Java
Код указано ниже:
public static String Compress(String s)
{
if(s.length()<=2)
{
return s;
}
int org_length=s.length();
String comp="";
int i=0;
while(i<org_length)
{
Integer lc=1;
while(i+1<org_length && s.charAt(i)==s.charAt(i+1))
{
lc++;
i++;
}
if(i>=org_length){
comp=comp+s.charAt(s.length()-1)+1;
}
else{
comp=comp+s.charAt(i)+lc.toString();
}
i++;
}
if(s.length()<=comp.length())
{
return s;
}
return comp;
}
Извините, вы можете уточнить, спрашиваете ли вы, эффективный подход кодирования по длине, или если существует более эффективный способ сжатия строк? –
http://en.wikipedia.org/wiki/Run-length_encoding – SLaks
Я бы сказал, что оба, но если бы мне пришлось выбирать один, это было бы, если бы был более эффективный способ сжатия строк. –