回答
如果按「按字母順序排序」UTF8字符,則可以將它們轉換爲32位整數(UTF8字符爲1到4個8位值),然後執行RADIX sort。它將在O(N)時間內工作。如果您只使用ASCII,我會建議Counting Sort。
有許多匹配簽名的方法,但我會使用Hash Table(平均O(1))或O(Lg N)結構,例如Red-Black Trees或Skip-Lists。
爲了進一步加快字符串匹配,您可以通過Run Length Encoding這些UTF8字符壓縮這些簽名(因爲它們已排序,簽名將爲運行+間隙)。實際上,您可以壓縮它們以使用代表7位字符(最常見),RLE運行和更長文字(8位到32位字符)的位標記。比較壓縮的字符串會更快。
你不指定編程語言或字符串的語言(是ASCII,Latin1的,UTF8,UTF16等),但基本上你比較功能將需要或者人物中的每個字符串,然後進行排序基於比較返回結果或者求和每個字符串中字符的序數值並返回它們之間的整數比較結果。
我要尋找的Java解決方案和串的語言是UTF8 – Rachel 2009-09-29 03:40:22
問題類似於one asked here,對此我的回答是:
#define NUM_ALPHABETS 256
int alphabets[NUM_ALPHABETS];
bool isAnagram(char *src, char *dest) {
len1 = strlen(src);
len2 = strlen(dest);
if (len1 != len2)
return false;
memset(alphabets, 0, sizeof(alphabets));
for (i = 0; i < len1; i++)
alphabets[src[i]]++;
for (i = 0; i < len2; i++) {
alphabets[dest[i]]--;
if (alphabets[dest[i]] < 0)
return false;
}
return true;
}
這是使用計數兩次排序的巧妙方法(第二時間遞減)。它對ASCII很好,但對於UTF8(字符集可以有8,16,24或32位字符)不太好。不過,就像我說過的一個有趣的例子,重新調整Counting Sort來找到anagrams。 – Adisak 2009-10-03 19:47:47
- 1. 對字符串數組進行排序
- 2. 對字符串數組進行排序
- 3. 排序兩個因字符串數組
- 4. 使用合併排序對n個字符串進行排序
- 5. 對字符串數組進行排序並忽略大小寫
- 6. 對字符串中的字符進行排序的C程序
- 7. 對字符串數組進行不區分大小寫排序
- 8. 按另一個字符串的位置對字符串進行排序
- 9. 對4個數組進行排序的文件(字符串)
- 10. 按字符串中的數字對數組進行排序?
- 11. 排序字符串數組
- 12. 排序字符串數組
- 13. 排序字符串數組
- 14. 排序字符串數組
- 15. 排序字符串數組
- 16. Postgresql函數對字符串中的字符進行排序
- 17. AWK按字符串長度對字符串進行排序
- 18. 如何給出這些字符串的任意排序的字符串數組?
- 19. 在對數組進行排序時忽略某些字符串
- 20. 由另一個字符串排序字符串,大寫字母第一個
- 21. 排序字符串數字
- 22. 以mips對字符串進行排序
- 23. 通過包含數字對字符串數組進行排序?
- 24. 根據不同字符的數量對字符串進行排序
- 25. 根據字符串中的數字對字符串進行排序Java
- 26. 合併排序字符串數組
- 27. C#合併排序字符串數組
- 28. 合併和排序字符串數組
- 29. 如何對字符串中的字符進行排序?
- 30. 在Python中對字符串中的字符進行排序
你可以嘗試澄清你的問題一點? anagrams與什麼有關?你想排序不同的字符串還是排序組成一個字符串的字符? – 2009-09-29 03:36:25
我必須1.對兩個不同字符串的字符進行不同的排序,並將其排序爲2.我對這些字符串進行排序和排列。 – Rachel 2009-09-29 03:43:07