我一直试图找出是否可以使用其他类型的数据结构来解决此问题。我设法以某种方式解决了它,但是仍然缺少许多高质量的代码。

前几天在一次采访中有人问我:
给定一个输入字符串,例如:

String[] inputString = { "a1", "a2", "a3", "a4", "a5", "b1", "b2", "b3", "b4", "b5"};


将此转换为输出字符串:

String[] outputString = { "a1", "b1", "a2", "b2", "a3", "b3", "a4", "b4", "a5", "b5" };


我尝试了以下方法,到目前为止,我认为这需要一些改进:

public class ArrayApp {
    public static void main(String[] args) {

        String[] inputString = { "a1", "a2", "a3", "a4", "a5", "b1", "b2",
                "b3", "b4", "b5" };
        // String[] outputString = { "a1", "b1", "a2", "b2", "a3", "b3", "a4",
        // "b4", "a5", "b5" };

        String[] str1 = new String[5];
        System.arraycopy(inputString, 0, str1, 0, 5);
        System.out.println("String Array str1");
        for (int i = 0; i < str1.length; i++) {
            System.out.print(str1[i]);
        }
        System.out.println();
        String[] str2 = new String[5];
        System.arraycopy(inputString, 5, str2, 0, 5);
        // System.out.println(str2.length);
        System.out.println("String Array str2");

        for (int i = 0; i < str2.length; i++) {
            System.out.print(str2[i]);
        }

        String temp = "";
        int i = 0, j = 0;

        for (i = 0; i < str1.length; i++) {
            temp = temp + str1[i];
            for (j = i; j < str2.length; j++) {
                if (j > i) {
                    break;
                }
                temp = temp + str2[j];
            }
        }
        System.out.println("\nFinal String " + temp);

        System.out.println();

    } // end main()
} // end class ArrayApp


问题是-可以通过使用Set来改善此问题吗?我尝试遍历集合,但这对我不起作用。我还需要使用其他收集类吗?

谢谢你的时间。

顺便说一句,这是O / P


  字符串数组str1 a1a2a3a4a5字符串数组str2 b1b2b3b4b5最终
  字符串a1b1a2b2a3b3a4b4a5b5

最佳答案

一种明显的方法是简单地对数组进行排序(由于其长度,也许使用插入排序-或只是Arrays.sort()重用API代码)。

另外,您可以使用具有两个索引的循环,分别从ij开始,分别将05放在第一个数组中,然后将第一个元素放在一个新数组中,然后放在第一个元素中,依此类推,每次增加每个索引,直到填满整个结果数组为止。后者的计算效率可能更高(因为在最坏的情况下它是O(n)),但是它应该做什么却不那么明显。

或者,您甚至可以完全展开循环,然后执行以下操作:

String[] newArray = new String[]
{
    inputString[0], inputString[5],
    inputString[1], inputString[6],
    inputString[2], inputString[7],
    inputString[3], inputString[8],
    inputString[4], inputString[9]
}


实际上,这虽然是最不通用的方法,但却是计算效率最高的方法。

07-28 02:16
查看更多