假设有一种加密字符串的方法:
- 在字符串的末尾附加字符 $,它是字母表中的第一个字符。
- 通过不断地将第一个字符移动到字符串的末尾来形成我们得到的所有字符串。
- 将我们得到的所有字符串按字母顺序排序。
- 通过将每个字符串的最后一个字符附加到它来形成一个新字符串。
例如,单词 FRUIT 以以下方式加密:
We append the character $ at the end of the word:
FRUIT$
We then form all the strings by moving the first character at the end:
FRUIT$
RUIT$S
UIT$FR
IT$FRU
T$FRUI
$FRUIT
Then we sort the new strings into alphabetical order:
$FRUIT
FRUIT$
IT$FRU
RUIT$F
T$FRUI
UIT$FR
The encrypted string:
T$UFIR
现在我的问题很明显:如何将给定的字符串解密为原始形式。
头疼了半个星期,终于没纸了。
我该怎么办?
我发现了什么:
如果我们有加密的最后一步:
$FRUIT
FRUIT$
IT$FRU
RUIT$F
T$FRUI
UIT$FR
我们可以知道原始字符串的第一个和最后一个字符,因为最右边的列是加密字符串本身,最左边的列总是按字母顺序排列。最后一个字符是加密字符串的第一个字符,因为 $ 在字母表中总是排在第一位,而且它在一个字符串中只存在一次。然后,如果我们从最右边的列中找到 $ 字符,并在最左边的列中查找同一行的字符,我们会得到第一个字符。
所以我们可以知道加密字符串 T$UFIR 是原始字符串是 F***T$,其中 * 是一个未知字符。
我的想法到此结束。现在我必须利用万维网问另一个人:怎么做?
您可以说这是作业,并且熟悉我的导师,我将赌注押在这是一个动态编程问题上。