文章

11

粉丝

27

获赞

19

访问

1.2k

头像
平衡字符串 代码是copy的,只是对代码逻辑做解释
P2016 上海交通大学机试题
发布于2025年2月5日 10:26
阅读数 16

//2016-平衡字符串
#include<bits/stdc++.h>
using namespace std;




//正确答案  
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <unordered_map>


using namespace std;
int main() {
    int n, m;
    string s;
    while (cin >> n >> m) {
        cin >> s;
		char c = s[0];
        unordered_map<int, int> map;
        int a = 0, b = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s[i] == c) {
                a++;
            } else {
                b++;
            }
            int t = a - b;
            //map和set两种容器的底层结构都是红黑树,所以容器中不会出现相同的元素,
			//因此count()的结果只能为0和1,
			//可以以此来判断键值元素是否存在(当然也可以使用find()方法判断键值是否存在)。 
            if (map.count(t) == 0) {
                map[t] = i;      //问题1:如果有多个i满足等于t怎么办,为什么只记录最小的i 
            }
        }
//回答问题1:为什么只记录最小的i
//看以下例子,nums[0]和nums[2]都是1,对于string[9],(倒数第二个b)
//其nums[9]=4,0-9这一段和2-9这一段都满足qi=3阶...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发