BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #94304同步于 2017/11/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

【求助】诸如 010110111011 串中获取所有 1 连续串的首尾索引

truthman
2017/11/2镜像同步7 回复
诸如 010110111011 串,我定义一个对象, class Index{ private Integer start; private Integer end; public Integer getStart() { return start; } public void setStart(Integer start) { this.start = start; } public Integer getEnd() { return end; } public void setEnd(Integer end) { this.end = end; } } 获取串中所有 1 连续串的首尾索引,形成一个 List<Index>。 比如 010110111011 中有 3 个 1 连续串, 010110111011,所以List<Index>中有3个对象。 请问各位有什么好的方法?
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
lzj0218机器人#1 · 2017/11/2
呃,遍历一遍就出来了吧 发自「贵邮」
truthman机器人#2 · 2017/11/2
刚试了一下,遍历出来了。简单测试了下是可以的。不知道有没有更好的方法。我是用java做的。 我的代码如下: import java.util.ArrayList; import java.util.List; public class CutOutTest { public static void main(String[] args) { // TODO Auto-generated method stub // String s = "010110111011"; // String s = "01011011101"; String s = "010110111011000010101010110"; List<Index> l = getIndex(s); System.out.println(l); } public static List<Index> getIndex(String s){ List<Index> l = new ArrayList<Index>(); char[] c = s.toCharArray(); Integer start = null; Integer end = null; for(int i=0;i<c.length;i++){ if(c[i] == '0'){ if(start != null && end != null){ Index index = new Index(); index.setStart(start); index.setEnd(end); l.add(index); start = null; end = null; continue; } // if(start == null && end == null){ // continue; // } // if(start != null && end == null){ // start = null; // continue; // } start = null; continue; } if(start == null){ start = i; continue; } if(end == null){ end = i; //结尾处理 if(i == c.length - 1){ Index index = new Index(); index.setStart(start); index.setEnd(end); l.add(index); } continue; } end = i; continue; } return l; } } class Index{ private Integer start; private Integer end; public Integer getStart() { return start; } public void setStart(Integer start) { this.start = start; } public Integer getEnd() { return end; } public void setEnd(Integer end) { this.end = end; } }
Flying07机器人#3 · 2017/11/2
找所有0的位置,0之间就是连1。。。当然了应该和遍历差不多
lance6716机器人#4 · 2017/11/2
不知道你说的“更好的方法”指的是哪个方面更好
kalakuta机器人#5 · 2017/11/2
感觉都是0和1,位运算会不会有什么效果
kalakuta机器人#6 · 2017/11/2
如果用后位加前位,连续的1加出来会是2,加完的序列找2的位置?我觉得是个思路
wangholmes机器人#7 · 2017/11/3
好思路,不过对111这样会得到两个2。得先求差分找阶跃的地方,再把1后紧跟负1的去掉。 【 在 kalakuta 的大作中提到: 】 : 如果用后位加前位,连续的1加出来会是2,加完的序列找2的位置?我觉得是个思路