猿辅导那道最大子串怎么写啊?

没法调试,都不知道我的思路对不对。。。
全部评论
开个数组或者map,下标i的记录前缀和为i的最早出现位置。 扫一遍更新数组和答案就行了。
点赞 回复 分享
发布于 2016-09-06 21:33
好坑啊,不能在自己环境编写,在线还不能调试
点赞 回复 分享
发布于 2016-09-06 21:11
输入只由 -1 和 1组成的数组,求和为0的最长子串长度
点赞 回复 分享
发布于 2016-09-06 21:17
题目是啥
点赞 回复 分享
发布于 2016-09-06 21:15
你是啥想法呢
点赞 回复 分享
发布于 2016-09-06 21:26
是非要连续吗?我看了半天,觉得是非连续的,就按非连续做的。。
点赞 回复 分享
发布于 2016-09-06 23:04
这个是不是要用dp
点赞 回复 分享
发布于 2016-09-07 09:29
看了这个博客,自己写的 http://blog.csdn.net/sunnyyoona/article/details/41910519 package YuanFuDao; import java.util.HashMap; import java.util.Map; import java.util.Scanner; /** * Problem * * 如果一个串只由1和0组成,并且其中1和0的个数相等,我们称之为偶子串。给出一个只由1和0组成的串,求这个串中的子串中,最长的偶子串。 * * Input * * 第一行是N,测试用例的总数,接下来是N行1和0组成的串 * * Output * * N行结果,最长偶子串可能有多 * * Sample Input * * 5 100111011001 10001111 10010111 100111010011 0111101010101110 * * Output * * Case #1: 10 Case #2: 6 Case #3: 6 Case #4: 10 Case #5: 8 */ public class Longest01SubArray { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String s = scanner.next(); solution(s); } scanner.close(); } // 思路:设dp[i]是0~i的前缀和,求dp[i]==dp[j]并且|i-j|最大的值 //用map存这个<dp[i],i> static void solution(String s) { // key是前缀和,value是最小的索引 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); map.put(0, -1);// 为了统一 int maxlen = 0; int presum = 0; for (int i = 0; i < s.length(); i++) { presum += s.charAt(i) - '0' == 0 ? -1 : 1; if (map.containsKey(presum)) { int startid = map.get(presum); if (i - startid > maxlen) { maxlen = i - startid; } } else { map.put(presum, i);// 第一次出现该前缀和的位置 } } System.out.println(maxlen); } }
点赞 回复 分享
发布于 2016-09-07 10:12
左程云那本书上有这个题……然而我忘了怎么写了……
点赞 回复 分享
发布于 2016-09-07 10:15

相关推荐

头发暂时没有的KFC总裁:找廉价劳动力罢了
点赞 评论 收藏
分享
昨天 13:52
门头沟学院 后端
给🐭🐭个面试机会吧:嘿,mvbatis
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务