// 将遇到10后,左侧的1全部移动到最左侧
int count = Math.min(zeroCount, oneCount);
int startIndex = this.occupyIndexList.get(0);
int endIndex = 0;
if(pos>1 && count>0) {
pos--;
endIndex = this.occupyIndexList.get(pos);
for (int i=0; i this.startBitSet.set(startIndex, true); this.startBitSet.set(endIndex, false); startIndex = this.occupyIndexList.get(i+1); pos--; if(pos>0) { endIndex = this.occupyIndexList.get(pos); } } } // 将遇到1的位置用*替换 for (int i=0; i if (this.startBitSet.get(this.occupyIndexList.get(i))) { charArrayClone[this.occupyIndexList.get(i)] = '*'; } } this.container.add(new String(charArrayClone)); } } } } 测试用例如下所示: package org.shirdrn; import java.util.ArrayList; import java.util.Collection; import junit.framework.TestCase; import org.shirdrn.util.GoodTools; public class TestCommonSplitter extends TestCase { private CommonSplitter splitter; public void setSplitter(Collection this.splitter = new CommonSplitter(container, starCount, duplicate); } public void testSplliter() { Collection container.add("1*10**"); int starCount = 2; boolean duplicate = true; this.setSplitter(container, starCount, duplicate); System.out.println(this.splitter.getFilteredContainer()); } public void testSplliter3() { Collection container.add("1*10*1300*"); int starCount = 3; boolean duplicate = true; this.setSplitter(container, starCount, duplicate); System.out.println(this.splitter.getFilteredContainer()); assertEquals(35, this.splitter.getFilteredContainer().size()); } public void testNoStar() { Collection container.add("3110330"); int starCount = 3; boolean duplicate = true; this.setSplitter(container, starCount, duplicate); System.out.println(this.splitter.getFilteredContainer()); assertEquals(35, this.splitter.getFilteredContainer().size()); } public void testSplitter_8_310() { // 8 场:310 String multiSeq = "310,310,310,310,310,310,310,310"; Collection assertEquals(6561, container.size()); int starCount = 4; boolean duplicate = false; this.setSplitter(container, starCount, duplicate); assertEquals(459270, this.splitter.getFilteredContainer().size()); } } 上述测试耗时大约2s左右。 上述算法实现主要是针对两种条件进行实现的,即: 第一个是完全数字字符串 ——> 带有*号的组合数字字符串; 第二个带有*号的组合数字字符串 ——> 在该基础上继续组合得到带有*号的组合数字字符串。 如果使用上述算法实现处理第一个条件,由于使用了列表List来记录索引,使执行速度略微低一点,比之于前面实现的不使用List列表来处理。
① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;
② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。