2014-10-09 24 views
1

我想检查包含相同字符的字符串。例如 我的字符串是:如何检查字符串在scala中包含相同的字符?

BCE 
CE 

我想要的结果是,

BEC = BCE //true 
ECB = BCE //true 
CEB = BCE //true 
CBE = BCE //true 
EBC = BCE //true 

CE = EC //true 
+0

@Kocko我使用equals,substring,compareTo ... BUt它不起作用 – rosy 2014-10-09 06:04:33

+3

'(“A”,“AA”)的结果应该是什么? – 2014-10-09 06:07:34

+0

我想假':) – 2014-10-09 06:11:23

回答

5

字符串可以隐式转换为集合和集合有一个toSet方法,使内容的设置,并设置身份与秩序无关。

+0

OP没有回复评论问题是否重复计算。比较'groupBy身份'。或者为了好玩,'s.permutations包含s2'。 – 2014-10-09 16:07:06

+0

@ som-snytt - 如果我们很有趣,那么'(s diff s2)+(s2 diff s)==“”'怎么样? – 2014-10-09 20:31:32

+0

是的,这增加了我的午餐时间,thx。 – 2014-10-09 21:04:41

1

从你的例子看来,你只是想检查字符串是否是另一个字符串的置换。一个快速的方法是只对字符进行排序并比较结果。更有效的方法是建立其中一个字符串的直方图,然后通过另一个字符串并递减每个字符的直方图计数,如同在第二个字符串中查找它们一样。如果最后你有一个空的直方图,字符串是相同的。

4

考虑使用此方法,

implicit class RichString(val s1: String) extends AnyVal { 
    def sameAs(s2: String) = s1.sorted == s2.sorted 
} 

使用方法如下,"CBE".sameAs("BCE")

+0

真棒解决方案:) – 2014-10-09 06:14:16

相关问题