我正在研究这个magical sub-string program,但我仍然坚持如何在我的Java程序中继续进行。
这是我的计划:
static String findLargest(String str) {
String[] splits = str.split("");
Set<String> set = new LinkedHashSet<String>();
for (int i = 0; i < splits.length; i++) {
if (splits[i].equals("0")) {
continue;
}
int zeros = 0;
int ones = 0;
StringBuilder sb = new StringBuilder("");
for (int j = i; j < splits.length; j++) {
if (splits[j].equals("0")) {
zeros++;
} else {
ones++;
}
sb.append(splits[j]);
if (zeros == ones && ones >= zeros) {
set.add(sb.toString());
}
}
}
set.remove(str);
List<String> list = new ArrayList<String>(set);
System.out.println(list);
return null;
}
使用这个程序,我能够在我的11011000
变量中将给定输入字符串[10, 101100, 1100]
的神奇子字符串作为list
。
现在,我正在努力解决如何从列表中删除101100
的无效条目,然后使用元素10, 1100
从我的输入11011000
进行交换以获得最终结果11100100
如果还有其他替代方法,请指导我。
答案 0 :(得分:0)
如果你的问题只是消除不需要的&#34; 101100&#34;从结果来看,这是答案
import java.util.ArrayList;
import java.util.HashMap;
import java.lang.*;
import java.util.Set;
import java.util.*;
public class HelloWorld{
public static void main(String []args){
findLargest("11011000");
}
public static String findLargest(String str) {
String[] splits = str.split("");
Set<String> set = new LinkedHashSet<String>();
for (int i = 0; i < splits.length; i++) {
if (splits[i].equals("0")) {
continue;
}
int zeros = 0;
int ones = 0;
StringBuilder sb = new StringBuilder("");
for (int j = i; j < splits.length; j++) {
if (splits[j].equals("0")) {
zeros++;
} else {
ones++;
}
sb.append(splits[j]);
if (zeros == ones && ones >= zeros) {
set.add(sb.toString());
j = i +1; // RESET THE INDEX ELEMENT TO SKIP THE SUBSTRING FROM CONSIDERATION
break; // BREAK FROM THE LOOP
}
}
}
set.remove(str);
List<String> list = new ArrayList<String>(set);
System.out.println(list);
return null;
}
}
答案 1 :(得分:0)
我可以提供一些观点。 首先,获取所有神奇的子串并将它们作为一对开始和结束索引(l,r)存储在列表中; 其次,根据索引l对列表进行排序; 那些可能被交换的子串可以从相同的索引l获得。看看给出的例子“11011000” 该清单将有(0,7),(1,2),(1,6),(3,6),(4,5) 显然只有潜在的掉期是(1,2)(1,6)
处理这些子串具有相同的索引l将有助于找到潜在的交换子串,对它们进行排序以找到最大顺序。