首页 > 其他分享 >前缀和解决字符串变化问题

前缀和解决字符串变化问题

时间:2024-06-03 21:22:18浏览次数:16  
标签:std 前缀 back 大写 解决 小写 字符串 操作

题目

小苯有一个长度为\(n\)的字符串\(s\),每次操作他可以选择一个位置的字母将其的大小写反转,也就是说如果字符是小写,则操作后会变成大写,如果字符是大写则反之。
他现在希望将\(s\)变为:“前面若干字符是大写,后面的字符全是小写”的样子,例如:"AABBccdd"。(注意:全大写和全小写均不合法)
请问他最少需要进行几次操作呢,请你帮帮他吧。
https://ac.nowcoder.com/acm/problem/273931

Input

输入包含一行一个字符串\(s (2 \leq |s| \leq 10^5)\)表示题中所述的字符串,保证只包含小写和大写字母。

Test1

aaBB

Test2

AAAA

Output

输出包含一行一个整数,表示最少的操作次数.

Test1

3

说明:可以将字符串变为:"AABb",操作了 3 次。

Test2

1

说明:变为:"AAAa",操作 1 次。

题解

解题思路

由题意得,本题可理解为找到一个位置,使得将小写变大写和将大写变小写的次数最少,为了保证可行的时间复杂度,可以才用前缀与后缀和预处理更改次数,再进行枚举得到最小操作数

Tips
关于大小写的一些操作:
char c='a';
if(c&' ')//判断是否为小写
if(~c&' ')//判断是否为大写
c|=' ';//转换为小写,等价于std::tolower
c^=' ';//如果原本是大写,转换为小写,原本是小写转换为大写。
c=(c|' ')^' ';//转换为大写字母,等价于std::toupper

Code

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false); cin.tie(nullptr);
using namespace std;
typedef long long LL;

signed main(){
    IOS;
    string s;cin>>s;
    int n=s.size();
    vector<LL> pre(n+1),back(n+1);
    for(int i=1;i<n;i++){
        if(s[i-1]&' ') pre[i]=pre[i-1]+1;
        else pre[i]=pre[i-1];
    }
    
    for(int i=n-2;i>=0;i--){
        if(~s[i+1]&' ') back[i]=back[i+1]+1;
        else back[i]=back[i+1];
    }
    LL ans=8e8;
    for(int i=1;i<n-1;i++){
        ans=min(ans,pre[i]+back[i]);
    }
    cout<<ans<<endl;
    return 0;
}

标签:std,前缀,back,大写,解决,小写,字符串,操作
From: https://www.cnblogs.com/TaopiTTT/p/18229676

相关文章

  • 字符串-重复的子字符串
         力扣题号:459.重复的子字符串一、题目描述给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。二、示例示例1:输入:s="abab"输出:true解释:可由子串"ab"重复两次构成。示例2:输......
  • 初中生成绩不好怎么办,学生家长别着急,过来人教你如何解决
      初中阶段的学生,因为要面临中考,所以老师和家长对他们的学习成绩非常重视。但是并不是所有的初中生,成绩都能够达到理想的水平,因此,一部分的学生家长难免会着急。  毕竟中考是学生成长路上面临的第一个重要的考试,考得不好对学生的影响也不小,因此家长们着急,积极想办法去......
  • 关于vue关闭页面时去除定时器失效问题解决
    1.先去除页面缓存,这个在路由部分 2.    ......
  • 【微信小程序】bug解决:van-tab+ucharts多图显示问题
    这是一条价值30r的博客......
  • 解决php因为输出内容太短无法流式(Stream)输出问题
    实测得知,如果用PHP做流式输出每次echo的内容太短的话,就没有流式的效果了,而是会等输出的长度达到一定时前端才能拿到结果,如下:  这是我这边的测试结果,可见,这里仅接收到了两次流式输出,但是我在PHP里是输出了10次,从而证明了每次流式的内容达到一定长度时才能有流式得到效果,这个......
  • 深入跨域 - 解决方案
    1前言前文《深入跨域-从初识到入门》中,大家已经对同源与跨域的产生历史与重要性等有了一个初步的了解了,那么我们应该如何解决在日常开发中遇到的跨域引起的问题呢? 2一览图我们将日常开发中的跨域解决方案大体分为两类:iframe跨域与API跨域:       ......
  • 拼多多面试:Netty如何解决粘包问题?
    粘包和拆包问题也叫做粘包和半包问题,它是指在数据传输时,接收方未能正常读取到一条完整数据的情况(只读取了部分数据,或多读取到了另一条数据的情况)就叫做粘包或拆包问题。从严格意义上来说,粘包问题和拆包问题属于两个不同的问题,接下来我们分别来看。1.粘包问题粘包问题是指在网络......
  • SMOGN算法Python实现:解决回归分析中的数据不平衡
      本文介绍基于Python语言中的smogn包,读取.csv格式的Excel表格文件,实现SMOGN算法,对机器学习、深度学习回归中,训练数据集不平衡的情况加以解决的具体方法。  在不平衡回归问题中,样本数量的不均衡性可能导致模型在预测较少类别的样本时表现较差;为了解决这个问题,可以使用SMOTE(Sy......
  • 无法直接启动带有”类库输出类型“的项目。若要调试此项目,请向引用库项目的此解决方案
    原文链接:https://blog.csdn.net/m0_56366948/article/details/137480405当你尝试直接启动一个类库(ClassLibrary)项目时,你会遇到这样的错误消息,因为类库项目本身不生成可执行文件(如.exe文件),它们只是包含可以被其他程序或应用程序引用的代码。为了调试类库项目,你需要创建一个可......
  • 【Redis】Redis集群脑裂的原因及解决方案
    Redis集群脑裂(Split-Brain)是指在集群模式下,网络分区或节点故障导致集群中的一部分节点失去与其他节点的连接,从而出现多个孤立的子集群,各自认为自己是独立的主集群。这种情况可能导致数据不一致和服务不可用。脑裂的成因网络分区:网络故障导致集群中的部分节点无法互相通信......