当前位置: 首页 > news >正文

蓝桥刷题note10(最长回文串,种花问题,柠檬水找零)

1.最长回文串

给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的 回文串 的长度。

在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。

中心思路:找偶数个字符。

int longestPalindrome(char* s) {
    int len=strlen(s);
    if(len<2){
        return len;
    }
    int n[128]={0};
    for(int i=0;i<len;i++){
        n[s[i]]++;           //统计每个字符的个数
    }
    int length=0;
    int mid=0;
    for(int i=0;i<128;i++){
        if(n[i]%2==0){        //找偶数个字符
            length+=n[i];
        }else{
            length+=n[i]-1;   //若为奇数个,则先加偶数个
            mid=1;
        }
    }
    if(mid){
        length+=1;       //有中间数长度加一,不上之前少加的
    }
    return length;
}

 

 

2.种花问题 

假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。

给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false 。

中心思路:遍历数组,若为0,检查前后是否为零,还有数组头和尾的特殊位置也要考虑。 

bool canPlaceFlowers(int* flowerbed, int flowerbedSize, int n) {
    if(n==0){
        return true;
    }
    for(int i=0;i<flowerbedSize;i++){
        if(flowerbed[i]==0){
           if((i==0||flowerbed[i-1]==0)&&(i==flowerbedSize-1||flowerbed[i+1]==0)){
            flowerbed[i]=1;
            n--;
           }
        }
    }
    return n<=0;
}

 

 3.柠檬水找零

在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。

每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。

注意,一开始你手头没有任何零钱。

给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。

中心思路:设三个变量用来储存收到不同面额钞票的数量,并实时检查找钱情况,更新数量 

bool lemonadeChange(int* bills, int billsSize) {
    if(bills[0]==10||bills[0]==20){
        return false;
    }
    int num1=0,num2=0,num3=0;
    for(int i=0;i<billsSize;i++){
        if(bills[i]==5){
            num1++;
        }
        if(bills[i]==10){
            num2++;
            if(num1>0){
                num1--;
            }else{
                return false;
            }
        }
        if(bills[i]==20){
            num3++;
            
                if(num1>0&&num2>0){      //优先找带10元的
                    num1--;
                    num2--;
                }
                else if(num1>=3){
                    num1-=3;
                }
                else{
                    return false;
                }
        }
    }
    return true;
}

 

 

相关文章:

  • 基于Spring Boot + Vue的银行管理系统设计与实现
  • SQL语句---DDL
  • 机器视觉场景应用中,有没有超景深的工业镜头
  • HRP方法全文总结与模型流程解析
  • 如何理解响应式编程
  • 【C语言】内存函数详解
  • Oracle归档配置及检查
  • OpenGL(一)图形编程的基石
  • 达梦数据库的sql基本语法
  • 清晰易懂的 Node.js 彻底卸载与清理教程
  • Linux内核的页面错误:原因与解决方案
  • IO模型种类
  • 宫庭海:三十载光影铸就文化传奇
  • Python:单例模式魔法方法
  • 为何AI系统比以往任何时候都更需要红队测试
  • 光流 | 基于KLT算法的人脸检测与跟踪原理及公式,算法改进,matlab代码
  • C++20新特性:std::assume_aligned详解
  • 【GL010】C++
  • 数据结构初阶-二叉树的应用
  • 阿里开源的免费数据集成工具——DataX
  • 习近平同俄罗斯总统普京会谈
  • 调节负面情绪可以缓解慢性疼痛
  • 国家矿山安全监察局发布《煤矿瓦斯防治能力评估办法》
  • 自然资源部印发地理信息数据分类分级指南
  • 默茨在德国联邦议院第一轮投票中未能当选总理
  • 中南财经政法大学法学院党委副书记易育去世,终年45岁