首页 > 其他分享 >【每日一题】Problem 180C. Letter

【每日一题】Problem 180C. Letter

时间:2023-06-15 13:33:19浏览次数:51  
标签:std 字符 min 大写 num 180C vec Letter Problem

原题

解决思路

每一个字符以前一个字符为基准,来判断自己是 upper 还是 lower,从而找到最少的解

  1. 最开始的解决思路是,用回溯的方式来解决,即使划分区块该方法也十分耗时,因为每个字符都有两种情况,因此时间复杂度为 \(O(2^n)\)
  2. 将 \(1\) 的方式修改下,分别用 \(num[i][0], num[i][1]\)来记录第 \(i\) 个字符 upperlower 所需的最少次数,然后取其中最小解即所需结果
    • 当前字符为小写时
      • 如果保持不变,则前缀大写小写都可以,因此 \(num[i][0] = min(num[i-1][0], nums[i-1][1])\)
      • 如果想要大写,则前缀也必须是大写,因此 \(num[i][1] = num[i-1][1] + 1\)
    • 当前字符为大写时
      • 如果保持不变,则前缀必须是大写,因此 \(num[i][1] = num[i-1][1]\)
      • 如果想要小写,则前缀大写小写都可以,因此 \(nums[i][0] = min(num[i-1][0], num[i-1][1]) + 1\)
    • 综上,我们得到了递推公式,此时每个字符只需遍历一次,时间复杂度为 \(O(n)\)

方法 \(2\) 代码如下:

#include <bits/stdc++.h>

int main() {
    std::string s; std::cin >> s;
    std::vector<std::vector<int>> vec(s.size() + 1, std::vector<int>(2, 0));
    for (int i = 0; i < s.size(); ++i) {
        if (islower(s[i])) {
            vec[i + 1][0] = std::min(vec[i][0], vec[i][1]);
            vec[i + 1][1] = vec[i][1] + 1;
        } else {
            vec[i + 1][0] = std::min(vec[i][0], vec[i][1]) + 1;
            vec[i + 1][1] = vec[i][1];
        }
    }

    std::cout << std::min(vec[s.size()][0], vec[s.size()][1]) << std::endl;
    return 0;
}

// PRuvetSTAaYAA
// PRutSTAaYAA
// PRuvetSaYAA
// PRuvetSTAaaY
// PRuSTAaaA

标签:std,字符,min,大写,num,180C,vec,Letter,Problem
From: https://www.cnblogs.com/HelloEricy/p/17482610.html

相关文章

  • 【每日一题】Problem 174B. File List
    原题解决思路纯模拟,比较文件名长度是否合规,文件格式+下一个文件名长度是否合规误区文件名的长度要和文件格式+下一个文件名的长度分开判断更新左端点和每次迭代开始先判断的方式解决该问题最后一个'.'后的文件格式需要特殊处理在循环结束后与'.'不存在的情况共同......
  • unbounded knapsack problem
    DescriptionUnboundedKnapsackProblemThereare$N$kindsofitemsandaknapsackwiththecapacityof$V$,eachitemhasunlimitedpiecesavailable.Thevolumeofthe$i$-thitemis$v_i$,andvalueis$w_i$.Pleasesolvewhichitemscanbeputintothe......
  • 5、题目:Training in Creative Problem Solving: Effects on Ideation and Problem Fin
    期刊信息(1)作者:GeorgeB.Graen,StephenG.Graen(2)期刊:OrganizationalBehaviorandHumanPerformance(3)DOI:10.1016/0030-5073(82)90233-1(4)ISSN:0030-5073   研究背景创造力训练作为工业培训的一个子集,普遍面临着工业培训研究的许多问题,也面临着一些独特的问题。......
  • 【每日一题】Problem 120F. Spiders
    原题解决思路通过给定的数据,将其构建称树,取其中最大的深度进行拼接,最后得到最终结果如何获取最大的深度以每个节点作为root构建树,然后取其中最大的深度#include<bits/stdc++.h>/***@paramvec*@paramcur当前节点*@paramlast上一个访问的节点*@param......
  • RTFM、STFW 和 X-Y Problem
    如何提问艾瑞克。史蒂文.雷蒙德(EricStevenRaymond)的提问的智慧。这是一篇长文,看完需要十几分钟的时间。如果之前没有认真看过并且思考过,这十几分钟会改变你的职业生涯。这文章可能会出现一些让人不适的词语或者过时的例子,但我认为这不会影响它要表达的内容,而你需要好好琢磨作......
  • 解决 This is probably not a problem with npm. There is likely additional logging
    在执行npmrunserve运行项目的时候报错:dengzemiaodeMacBook-Pro:lianshan_vuedengzemiao$npmrunserve......npmERR!codeELIFECYCLEnpmERR!errno1npmERR!lianshan@2.0.0serve:`vue-cli-serviceserve`npmERR!Exitstatus1npmERR!npmERR!Failedatthelia......
  • Not Another Linear Algebra Problem 题解
    题意:自己看。首先我们知道我们唯一能找到的题解在hos_lyric的代码里。把它放在这里:(由bikuhiku提供)\[\begin{aligned}&U\subseteq\mathbb{F}_p^n,\text{subspace}\\&a(U):=\#\{p\in\text{Aut}(\mathbb{F}_p^n)|\text{Ker}(p-\text{id})=U\}\\&b(U):=......
  • 【每日一题】Problem 44E. Anfisa the Monkey
    原题解决思路由题意可得\(ak\lesize\lebk\),因此当条件不符合该要求时即可退出因为\(size\lebk\),因此,我们可以假设每行都是\(b\)长度来满足条件二,因此第\(i\)行的长度为\(len=size-(k-i)b\),然后对\(len\)取与\(a\)中的较大者来满足条件一注意,如果后续行每......
  • 【每日一题】Problem 363B. Fence
    原题解决思路求k个木板的最小高度和,因为所有木板的高度和不超过1e9,因此计算出到当前木板j的总高度-前j-k模板的总高度并求得最小数即可#include<bits/stdc++.h>intmain(){intn,k;std::cin>>n>>k;std::vector<int>vec(n+1,0);for(in......
  • 【每日一题】Problem 331C1. The Great Julya Calendar
    原题解决思路寻求减到0所需的最小次数,即\(Num(n)\RightarrowNum(n-x)+1\)当存在一个x使得(n-x)%10=0时,那么(n-x)到下一次个位为0时至少需要两次,即该过程至少需要3次如果存在一个x'>x,那么上述过程可以简化到至少需要2次一般情况下,当n中的前面一段(百位......