我一直试图找出是否可以使用其他类型的数据结构来解决此问题。我设法以某种方式解决了它,但是仍然缺少许多高质量的代码。
前几天在一次采访中有人问我:
给定一个输入字符串,例如:
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代码)。
另外,您可以使用具有两个索引的循环,分别从i
和j
开始,分别将0
和5
放在第一个数组中,然后将第一个元素放在一个新数组中,然后放在第一个元素中,依此类推,每次增加每个索引,直到填满整个结果数组为止。后者的计算效率可能更高(因为在最坏的情况下它是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]
}
实际上,这虽然是最不通用的方法,但却是计算效率最高的方法。