2017-06-12 118 views
1

相關:Generate a unique string based on a pair of strings基於一組有序的字符串生成直觀的唯一字符串?

我要生成一個直觀唯一的字符串來表示一個有序對字符串。

顯然,stringA + stringB非常直觀,但如果您考慮如"st" + "ring" == "stri" + "ng" == "string"則不是唯一的。

另外,不像鏈接的OP,我想有uniqueString(stringA, stringB) != uniqueString(stringB, stringA),即非交換。 類似MD5(stringA) - MD5(stringB)可能會考慮鏈接的OP,但我覺得這是非常不直觀的。

任何想法?

+0

'MD5(A)+ MD5(A + B)'? –

+0

stringA.length + stringA + stringB?你可以很容易地再次將它分成兩個字符串,如果一個或兩個字符串都爲空,它就可以工作。 – m69

+0

@StanislavKralin這會工作,但並不簡單,因爲我希望。 – akai

回答

1

編碼長度Ò f將第一個字符串放入結果字符串中;這樣,你就知道分裂的位置,「xy」+「z」與「x」+「yz」不同。
零填充長度,以便它始終具有相同的數字位數(取決於字符串的最大長度)。

實例(具有999的最大字符串長度):

"xxx" + "yyy" = "003xxxyyy" 
"xx" + "xyyy" = "002xxxyyy" 
"xxxyyy" + "" = "006xxxyyy" 
"" + "xxxyyy" = "000xxxyyy" 
"" + ""  = "000" 

替代地,如果該字符串的最大長度是未知的,則可以在長度後使用分隔符:

"xxx" + "yyy" = "3;xxxyyy" 

您不必爲此使用特殊字符,也不必使用字符串中的分隔符,因爲沒有歧義:

"a;b" + ";c;" = "3;a;b;c;" = length + delimiter + "a;b;c;" 
0

這種感覺非常像序列化問題......將兩個值放在同一個地方,然後仍然可以將它們分開。

其中一種最簡單的方法是使用分隔符àla csvs,但這需要您實現唯一的字符或字符序列。

解決這個問題就像在字符串中的分隔符的所有實例之前加上一個'\'以及'\'的所有實例一樣簡單。

作爲一個例子:

"hello, " + "wor\d" 
"hello\, " + "wor\\d" //Add in the escape characters 
"hello\, ,wor\\d" //Second comma is not escaped, parser knows to split the string back into two components there 
1

如果具有這樣的問題的任務,我想嘗試一個CSV式的方法,例如

  • stringA + stringB =>stringA;stringB

  • stringA + string;B =>stringA;"string;B"

  • stringA + string"B =>stringA;"string""B"

+0

看起來不錯,但自己實現這個聽起來超級錯誤容易。在任何語言中是否有任何參考實現或像csvConcat這樣的函數? – akai

+0

我注意到我可以使用csv作家... – akai

+0

這似乎比只使用一個單一的轉義字符,你也逃避,如',' - >'\,'和'\'更復雜和混亂 - >''''(如dornadigital的答案所示)。 – Dukeling

相關問題