Ruby查找组合

时间:2016-07-12 07:28:21

标签: ruby-on-rails ruby

我正在尝试将输入作为字符串。

然后我需要找到所有可能的组合和不同的组合,但我无法这样做。

input = "aabb"

输出我需要打印所有组合=

'a','a','b','b','aa','ab','bb','aab','abb','aabb'

现在明显的组合

'a','b','aa','ab','bb','aab','abb','aabb'

然后我需要计算字母并进行求和

'a','a','b','b','aa','ab','bb','aab','abb','aabb'

对于此

result = 1+1+1+1+2+2+2+3+3+4

同样,对于其他组合,我需要找到求和。

2 个答案:

答案 0 :(得分:4)

您可以使用Array#combination

获得所有组合:

input = "aabb"
res = []
input.size.times { |n| res << input.chars.combination(n+1).map { |a| a.join } }
res.flatten
#=> ["a", "a", "b", "b", "aa", "ab", "ab", "ab", "ab", "bb", "aab", "aab", "abb", "abb", "aabb"]

不同的组合:

res.flatten.uniq 
#=> ["a", "b", "aa", "ab", "bb", "aab", "abb", "aabb"]

计算字母并进行求和:

res.flatten.uniq.map(&:size)
#=> [1, 1, 2, 2, 2, 3, 3, 4]
res.flatten.uniq.map(&:size).reduce(:+)
# => 18

答案 1 :(得分:1)

要获取input的所有子字符串(或更常见的是获取Enumerable的所有子序列),您可以使用以下内容:

def subsequences(e)
  a = e.to_a
  indices = (0..a.length - 1).to_a
  indices.product(indices)
    .reject { |i, j| i > j }
    .map { |i, j| a[i..j] }
end

您可以在字符串上使用它:subsequences(input.chars).map(&:join)。仅charsjoin是必需的,因为String不是Enumerable,但subsequences函数并不真正需要list。你可以取出第一行,它仍然可以用于字符串(任何有&#34;切片&#34;下标操作符,真的......)。

另请注意,这不是执行此操作的唯一方法。这里的基本问题是迭代序列的所有有序索引对。您也可以使用基本循环来完成此操作。我碰巧发现笛卡儿的产品方法非常优雅。 ;)

一旦你在变量中有了第一个列表,比如list.uniq,第二个任务就像list.map(&:size).reduce(:+) 一样简单,第三个任务由

解决
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(arg0.latitude, arg0.longitude, 1);
String cityName = addresses.get(0).getAddressLine(0);