我需要做的是获取一个String数组,每个元素的长度都精确为2,并使用每个String中的每个字符查找元素的所有可能组合。我的意思是字符串数组{" Ss"," Ff"}返回" SF"," Sf"," sF& #34;," sf"。我已经尝试了一个循环方法来计算迭代,然后根据它选择一个字母,但它只适用于具有单个元素的数组:
public String [] generatePossibilities(String [] s)
{
if(s[0].length() != 2)
throw new IllegalArgumentException();
String [] r = new String [s.length * 2];
for(int i = 0; i < r.length; i++)
{
r[i] = getPossibility(i, s);
}
return r;
}
private String getPossibility(int iteration, String [] source)
{
int [] choose = new int [source.length];
for(int i = 0; i < choose.length; i++)
{
choose[i] = 0;
}
for(int i = choose.length - 1; i >= 0; i--)
{
if(iteration < 1)
break;
choose[i] = 1;
iteration--;
}
String result = "";
for(int i = 0; i < source.length; i++)
result += source[i].substring(choose[i], choose[i] + 1);
return result;
}
解决了谢谢Sven!
public String [] generatePossibilities(String [] s)
{
if(s[0].length() != 2)
throw new IllegalArgumentException();
ArrayList<String> ra = new ArrayList<String>();
for(int i = s.length - 1; i >= 0; i--)
{
for(int j = 0; j < s[i].length(); j++)
{
String c = s[i].substring(j, j + 1);
if(ra.size() < 2)
{
ra.add(c);
}
else
{
for(int k = 0; k < ra.size(); k++)
{
String s1 = ra.get(k);
if(s1.substring(0, 1).equalsIgnoreCase(c))
continue;
else
{
s1 = c + s1;
ra.add(s1);
}
}
}
}
for(int j = 0; j < ra.size(); j++)
{
if(ra.get(j).length() != s.length - i)
{
ra.remove(j);
j--;
}
}
}
String [] r = new String [ra.size()];
for(int i = 0; i < r.length; i++)
{
r[i] = ra.get(i);
}
return r;
}
答案 0 :(得分:1)
我会将最后一个元素的字符元组数组迭代到第一个元素。在每个步骤中,您将每个当前字符附加到最后一次迭代的可能性。因此,您在每个步骤中加倍元素。 因此,对于第一次迭代中的示例,您有{Ff},这将导致两个字符串&#34; F&#34;和&#34; f&#34;。在下一步中,您将获取{Ss}的每个字符,并将最后一步的每个字符串附加到其中以获得&#34; SF&#34;,&#34; Sf&#34;,&#34; sF&#34;和&#34; sf&#34;。然后,您可以继续使用更多字符元组。