ASCII文字列を短縮
-
21-09-2019 - |
質問
私はほとんど関心がなかセキュリティやものと自然が必要な機能(s)がより"圧縮"/"解凍"の文字列になります。また、Base64ですが、それは大きな問題のサイズは文字列です。私はこのハフマンものの、そのなかでもとく(下のメモリでは、整数).
言いたい任意の文字列'djshdjkash'符号化するその他の文字列'dhaldhnctu'.できるか、新しい文字列の長さ以下のオリジナルです。
これとJavascriptで行われている?
- 明し、先ほど言ったようにセキュリティの目的は、偽装の文字列を続けて長期間を短縮します。Base64でエンコードの例では、この文字列が長くなります。ROT13はっきりがなをカバーすべてASCII文字だけます。
解決
他のヒント
あなたはコードしない、圧縮を必要としています。一般的にエンコードするビットが追加されます。 Googleの "文字列圧縮アルゴリズム。"
、なぜちょうど大きな文字セット間で何かを実装していません。あなたの全体の印刷可能な文字セットと異なる順序で同じ文字を含むfrom
配列を含む文字のto
配列を設定します。
そして、それはfrom
配列でいた場合、あなたの文字列のすべての文字のために、to
配列における同等の位置で置き換えます。
このすべての利回り圧縮なししかし、すべての要件(短いか同じ長さ、変装した文字列)を満足させます。
擬似コードには、何かます:
chfrom = "ABCDEF..."
chto = "1$#zX^..."
def encode(s1):
s2 = ""
foreach ch in s1:
idx = chfrom.find(ch)
if idx == -1:
s2 += ch
else:
s2 += chto[idx]
return s2
def decode(s1):
# same as encode but swap chfrom and chto.
私はあなたが圧縮する正確に何か分かりません。それはString.length()
で見られるような文字列の長さ(ある場合は、Unicode文字の中に2つのASCII文字を圧縮することができた。だから、hello, world
(12文字)のような文字列が)(\u6865\u6c6c\u6f2c\u206f\u6f72\u6c64
で6つの文字を可能性があります。あなたはしかし、非常に注意する必要がありますあなたは \uFFFF
のような無効な文字を生成しないことを、あなたは常にから戻って行くことができること非圧縮の1に圧縮された文字列ます。
一方、この方法は完全に間違っています。ですから、文字列を圧縮したいどのような状況の下で明確にしてくださいます。