two hundred one weekly

5483. 整理字符串

  • 大小写英文字母组成的字符串 s
  • 一个整理好的字符串中
  • s[i] 是小写字符,但 s[i + 1] 是相同的大写字符;反之亦然 。

  • 将字符串整理好,每次你都可以从字符串中选出满足上述条件的 两个相邻 字符并删除,直到字符串整理好。

class Solution {
public:
    string makeGood(string s) {
        int len= s.size();
        stack <char> st;
        st.push(s[0]);
        for (int i=1;i<len;i++)
        {
            char temp=s[i];
            if(st.empty())
                st.push(temp);
            else
            {
                char top = st.top();
                if(top-temp == 32 || temp-top==32)
                {
                    st.pop();
                }
                else
                {
                    st.push(temp);
                }
            }
        }
        string result;
        while(!st.empty())
        {
            char temp = st.top();
            result=result+temp;
            st.pop();
        }
        reverse(result.begin(),result.end());
        return result;
    }
};

  • 沃特玛还用什么栈啊
  • 直接用一个string好了。

5484. 第N 个二进制字符串中的第 K 位

  • 二进制字符串 Sn 的形成规则如下:
  • S1 = “0”
  • 当 i > 1 时,Si = Si-1 + “1” + reverse(invert(Si-1))

S1 = “0”
S2 = “011”
S3 = “0111001”
S4 = “011100110110001”

  • 还是得益于C++里面的string啊
  • 不然要累死了
class Solution {
public:
    void invert(string &s)
    {
        for (int i=0;i<s.size();i++)
        {
            if(s[i]=='0')
                s[i]='1';
            else
                s[i]='0';
        }
    }
    char findKthBit(int n, int k) {
        string s="0";
        int len=1;
        while(len<=k)
        {
            string temp = s;
            invert(temp);
            reverse(temp.begin(),temp.end());
            s=s+"1"+temp;
            len = len *2+1;
        }
        return s[k-1];

    }
};

第三题

  • 超时了
class Solution {
public:
    bool isfind(vector<int>& nums,int start,int end,int target)
    {
        int sum=0;
        for (int i=end;i>=start;i--)
        {
            sum+=nums[i];
            if(sum==target)
                return true;
        }
        return false;
    }
    int maxNonOverlapping(vector<int>& nums, int target) {
        
        int *temp2 = new int [nums.size()];
        for (int i=0;i<nums.size();i++)
        {
            temp2[i]=-1;
        }
        int result=0;
        if(nums[0] == target)
        {
             temp2[0]=0;
            result++;
        }
           
        
        for (int i=1;i<nums.size();i++)//一定要包含第i个数
        {
            if(isfind(nums,temp2[i-1]+1,i,target))
            {
                result++;
                temp2[i]=i;
            }
            else
                temp2[i]=temp2[i-1]; 
        }
        for (int i=0;i<nums.size();i++)//一定要包含第i个数
        {
            cout << temp2[i]<<endl; 
        }
        return result;
    }
};

canci

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fgh431

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值