我正在尝试将输入作为字符串。
然后我需要找到所有可能的组合和不同的组合,但我无法这样做。
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
同样,对于其他组合,我需要找到求和。
答案 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)
。仅chars
和join
是必需的,因为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);