two hundred one weekly

文章目录

  • 5483. 整理字符串
  • 5484. 第N 个二进制字符串中的第 K 位
  • 第三题
    • canci

5483. 整理字符串

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

  • 将字符串整理好,每次你都可以从字符串中选出满足上述条件的 两个相邻 字符并删除,直到字符串整理好。
two hundred one weekly_第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

  • 添加链接描述

  • 添加链接描述

你可能感兴趣的:(leetcode)