LeetCode/双指针映射综合

1. 重新格式化字符

给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母。
请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同

class Solution {
public:
    string reformat(string s) {
        int digits=0;
        for(char&c:s)
            if(isdigit(c)) digits++;//计算数字个数
        int chars = s.size()-digits;//计算字符个数
        if(abs(chars-digits)>1) return "";//不能格式化
        bool flag = digits>=chars;//数字比字符多
        for(int i=0,j=1;i<s.size();i+=2){//遍历可能多的位置
            if(isdigit(s[i])==flag) continue;//满足在位条件,跳过直至不满足
            else{
                while(isdigit(s[j])!=flag)//满足在位条件,找不满足的
                    j+=2;
                swap(s[i],s[j]);//交换两值
            }
        }
        return s;
    }
};

2. 复写零

3. 删除有序数组中的重复项

4. 二维网格迁移

5. 黑名单中的随机数

posted @ 2022-08-11 20:05  失控D大白兔  阅读(14)  评论(0编辑  收藏  举报