京东9.3编程最后一题O(n)做法

全为左右括号的字符串,定义其对应的值为最长有效括号子序列的字符数,如())())最长有效括号子序列()(),因此对应的值为4
求字符串所有子串对应的值的和
例子1:())())
输出1:26
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main(){
    string str;
    cin >> str;

    vector<int> count_vec;  // 如())())的count_vec为{1, 2, 1, 2}
    count_vec.emplace_back(1);
    for(int i = 1; i < str.size(); i++){
        if(str[i] == str[i - 1]) count_vec.back()++;
        else count_vec.emplace_back(1);
    }

    long long res = 0, weight = 0, count = count_vec[0];
    char last_char = str[0];
    
    for(int i = 1; i < count_vec.size(); i++){
        if(last_char == '('){
            last_char = ')';
            weight += 2 * count;
        }
        else last_char = '(';
        res += weight * count_vec[i];
        count += count_vec[i];
    }

    cout << res;

    return 0;
}
原来的做法一直0%可能就是时间超了?考完了才写出来O(n)做法。
#京东##笔试##秋招#
全部评论
hi~同学,秋招遇“寒气”,牛客送温暖啦!23届秋招笔面经有奖征集中,参与就得牛客会员7天免费体验,最高赢300元京东卡!戳我去看>>>https://www.nowcoder.com/link/zhengjipinglun
点赞 回复 分享
发布于 2022-09-04 19:50 北京

相关推荐

牛客583549203号:腾讯还好,况且实习而已,实习生流动性很大,属于正常现象,记得和HR委婉解释
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
3
3
分享

创作者周榜

更多
牛客网
牛客企业服务