51nod 1393 0和1相等串 思路 : map存前缀和
来源:互联网 发布:软件运维工程师 编辑:程序博客网 时间:2024/06/05 11:40
题目:
思路:把'0'当成数字-1,'1'当成数字1,求前缀和,用map更新当前前缀和最早出现的位置。(用map而不用数组是因为可能会出现负数)
当前缀和的值之前出现过,比如i = 10时,sum = 0;j = 50时,sum = 0; 更新ans = max(ans,j-i);
下面是一个例子:
代码:
#include <bits\stdc++.h>using namespace std;map<int,int> m; //存前缀和最早出现的位置 int a[1000001]; //数字数组 int main(){ string s; cin >> s; //将字符串转换成数字数组 for (int i = 0; s[i]; ++i) { if (s[i] == '0') a[i + 1] = -1; else a[i + 1] = 1; } int ans = 0; //最大长度 int sum = 0; //前缀和 for (int i = 1; i <= s.length(); ++i) { sum += a[i]; //m[i]默认是为0的 (i为任意值) if (sum != 0 && m[sum] == 0) { m[sum] = i; //之前未出现过相同值 } else { ans = max(ans, i - m[sum]); // 之前出现过相同值 } } cout << ans << endl; return 0;}
阅读全文
0 0
- 51nod 1393 0和1相等串 思路 : map存前缀和
- 51nod 1393 0和1相等串(前缀和)
- 51nod 1393 0和1相等串 思路
- 51nod 1393 0和1相等串 (思维+前缀和)
- 51nod 0和1相等串
- 51NOD 1393 0和1相等串
- 51nod 1393:0和1相等串
- 51nod 1393 0和1相等串 (连续区间)
- 51nod 1393 0和1相等串
- 51Nod-1393-0和1相等串
- 51nod 1393 0和1相等的串
- 51nod oj 1393 0和1相等串 【贪心】
- 51Nod 1393 0和1相等串
- 51nod 1393 0和1相等串(鸽巢)
- 51nod 1393 0和1相等串
- 51nod-【1393 0和1相等串】
- 51nod 1393 0和1相等串【思维】
- 51Nod 1393 0和1相等串
- 【SequoiaDB教程】利用YCSB测试巨杉数据库性能
- 什么是AOP?
- Codeforces 845 C. Two TVs 思路:简单贪心算法
- samba
- Spring任务调度实战之Quartz Simple Trigger(转)
- 51nod 1393 0和1相等串 思路 : map存前缀和
- 51nod 1103 N的倍数 思路:抽屉原理+前缀和
- 分享一百多套开发视频教程的下载地址
- android开机自启动APP及使用adb命令测试
- 51 nod 1097 拼成最小的数 思路:字符串排序
- 生活随笔
- java实体转json忽略属性
- BeanUtils进行日期格式的拷贝转换
- 51 nod 1624 取余最长路 思路:前缀和 + STL(set)二分查找