2011-03-16 56 views
0

我正在尋找最有名的算法來從字符串中刪除重複項。我可以想出很多方法來做到這一點,但我正在尋找一種以特別有效的方式而聞名的解決方案。從PHP(或任何語言)的字符串中刪除重複項的最佳方法是什麼?

比方說,你有以下字符串:

  • Lorem Ipsum Lorem Ipsum
  • Lorem Lorem Lorem
  • Lorem Ipsum Dolor Lorem Ipsum Dolor Lorem Ipsum Dolor

我希望這個算法輸出每個(分別):

  • Lorem Ipsum
  • Lorem
  • Lorem Ipsum Dolor

注意,我在PHP這樣做,萬一有人知道的任何內置的PHP功能,可以幫助這一點。

謝謝!

+1

如果您有「Lorem Ipsum Ipsum Dolor Ipsum」會怎麼樣?你想要輸出爲「Lorem Ipsum Dolor」嗎? – Anthony 2011-03-16 20:01:56

+0

你的意思是重複的單詞! – AbiusX 2011-03-16 20:03:36

+0

不是,不刪除重複的單詞,只是重複單詞的模式 – chaimp 2011-03-16 20:35:07

回答

5
$arr = explode(" " , $string); 
$arr = array_unique($arr); 
$string = implode(" " , $arr); 
+0

謝謝,答案其實很優雅。 – chaimp 2011-03-18 04:10:31

1

最好的做這件事的方法:如果你的語言支持的話

  1. 排序中的字符串的話
  2. 通過遍歷排序的話

其他可能性刪除重複使用set建設。

+1

這是一個很好的答案,但需要將字符串恢復爲原始順序的額外步驟。 – chaimp 2011-03-16 20:36:19

2

說不上約效率,但也許這可以這樣做:

$str = implode(" ", array_unique(explode(" ", $str))); 
2
$words = array_unique(explode(' ',$text)); 
echo implode(' ',$words); 
如果你想變得更好,你可以使用

使preg_split與\ S \ W,用於引爆的話

0

您可以嘗試下面的代碼以刪除任何句子中的重複代碼

$arr = explode(" " , $string); 
$arr = preg_replace('/(\w{2,})(?=.*?\\1)\W*/', '', $arr); 
$string = implode(" " , $arr); 
相關問題