zoukankan      html  css  js  c++  java
  • N

    题目大意:删除字符,当一个字符左边或者右边存在一个比它小“1”的字符那么就可以将这个字符删除,问最多能删除多少个字符

    思路,:刚开始想的是,对于单调连续的字符,可以直接删除,比如,单点增的字符只保留前边的就行了,单调减的只保留后边的。。。然后知道不能删除为止。然后wa了一下午。。

    正解是复杂度是O(26*n*n),并且用到了string 里的erase

    补充:

    string::erase 用法:

      (1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
      (2)erase(position);删除position处的一个字符(position是个string类型的迭代器) 

      (3)erase(s.begin()+c,s.begin()+c+t);删除从c开始向后查t个字符。

    #include<bits/stdc++.h>
    using namespace std;
    const int inf=0x3f3f3f3f;
    const int N=110;
    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()
    {
        scanf("%d",&n);
        cin>>s;
        int ans=0;
        while(solve())
            ans++;
        printf("%d
    ",ans);
     
    }

        

  • 相关阅读:
    初级算法-1.从排序数组中删除重复项
    一个字符串匹配函数...
    Working With JSON
    javascript iterator
    js 正则表达式验证密码、邮箱格式.....
    SpringMVC 定时任务
    JS 数组去重
    JAVA 跨域请求 不用JSONP 不用CORS
    openLayer 跳到指定坐标
    清空CheckBox 勾选
  • 原文地址:https://www.cnblogs.com/Accepting/p/12470002.html
Copyright © 2011-2022 走看看