C. Remove Adjacent

C. Remove Adjacent

  1. 链接

    C. Remove Adjacent

  2. 题意

    给定一个长度小于100的字符串,只能删掉相邻的字母,问最多可以删几次。

  3. 思路

    贪心。每次取最大的字母,暴力枚举,时间复杂度\(26*n\)

  4. 代码实现

    #include<bits/stdc++.h>
    using namespace std; 
    string s;
    int n; 
    bool solve()
    {
     for(int j = 26; j >= 1; j--)
         for(int i = 0; i < s.size(); i++)
         {
             if(s[i] != 'a'+j)
                 continue;
             if(i  > 0)
                 if(s[i-1]=='a'+j-1)
                 {
                     s.erase(i,1);
                     return true;
                 }
             if(i  < s.size()-1)
                 if(s[i+1]=='a'+j-1)
                 {
                     s.erase(i,1);
                     return true;
                 }
         }
     return false;
    }
    
    int main(void)
    {
     scanf("%d",&n); 
     cin>>s;
     int ans=0;
     while(solve())
         ans++;
     cout<<ans<<endl;    
    }

猜你喜欢

转载自www.cnblogs.com/AC-AC/p/12401597.html