获得所有可能性 - 功课

时间:2014-06-09 08:44:55

标签: java arrays

我需要做的是获取一个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;
}

1 个答案:

答案 0 :(得分:1)

我会将最后一个元素的字符元组数组迭代到第一个元素。在每个步骤中,您将每个当前字符附加到最后一次迭代的可能性。因此,您在每个步骤中加倍元素。 因此,对于第一次迭代中的示例,您有{Ff},这将导致两个字符串&#34; F&#34;和&#34; f&#34;。在下一步中,您将获取{Ss}的每个字符,并将最后一步的每个字符串附加到其中以获得&#34; SF&#34;,&#34; Sf&#34;,&#34; sF&#34;和&#34; sf&#34;。然后,您可以继续使用更多字符元组。