周赛补题。

本文介绍了两个力扣题目,分别是构造最大回文数和计算字符串重新排列所需时间。对于回文数问题,通过统计每个数字出现的次数,从9开始构造,确保回文特性。字符串重排问题则简单地遍历字符串计算不同字符的出现次数,确定所需时间。这两个问题展示了在算法设计中如何有效地处理字符串操作。
摘要由CSDN通过智能技术生成

力扣307:

第二题:https://leetcode.cn/problems/largest-palindromic-number/

首先使用一个数组记录0-9出现的次数,在满足回文数的条件下,最大的数出现在最前面更好,所以从9开始添加数字,如果计数每超过2就可以在前面和后面个添加一个9,最中间会选择从9-0中最大的单个数字,即计数%2==1,由于不能有前导0,需要使用一个flag标记前面是否有数字,而且还可能存在全是0的情况,此时需要输出"0"。

class Solution {
public:
    string largestPalindromic(string num) {
        int n=num.size();
        int a[10];
        memset(a,0,sizeof(a));
        for(int i=0;i<n;i++){
            a[num[i]-'0']++;
        }
        int flag=0;
        string result="",result2="";
        for(int i=9;i>=0;i--){
            for(int j=0;j<a[i]/2;j++){
                if(i!=0)flag=1;
                if(i==0&&!flag)break;
                result+='0'+i;
            }
        }
        result2 = result;
        reverse(result2.begin(), result2.end());
        for(int i=9;i>=0;i--){
            if(a[i]%2==1){
                result+='0'+i;
                break;
            }
        }
        if(result.size()==0)return "0";
        return result+result2;
    }
};

力扣85双周:

第二题:https://leetcode.cn/problems/time-needed-to-rearrange-a-binary-string/

从左到右,直接遍历。

class Solution {
public:
    int secondsToRemoveOccurrences(string s) {
        int res = 0;
        for(int i = 0, cnt = 0; i < s.size(); ++i) {
            if(s[i] == '0') ++cnt;
            else if(cnt > 0) res = max(res + 1, cnt);
        }
        return res;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值