机试题 - 消除字符串中字符的最大个数

给一个字符串,字符串首尾相同可以消掉,字符串内部相邻的字符相同也可以删去,问最多能删掉几个字符

例:“nbabn”,首尾相同可以删除n,删完b也相同也可以删掉,最多能删除4个

思路:贪心思想,当首尾能删掉时优先删除,不能删时再去删除内部相邻字符,删除内部时要多次检测首尾

int res = 0;
    string helper1(string s){
        int low = 0;
        int high = s.size()-1;
        int t = 0;
        while(s[low]==s[high]){
            low++;
            high--;
            res += 2;
            t++;
        }
        return s.substr(t, s.size()-2*t);
    }
    string helper2(string s){
        int n = s.size();
        for(int i=0;i<n;i++){
            if(i<n-1 && s[i]==s[i+1]){
                return s.substr(0,i-1) + s.substr(i+2, n-(i+2));
            }
        }
        return s;
    }
    int function(string mystring){
        string str = helper1(mystring);
        string str2 = helper2(str);
        
        while(str!=str2){
            str = helper1(str2);
            str2 = helper2(str);
        }
        return res;
    }

全部评论

相关推荐

点赞 评论 收藏
转发
1 1 评论
分享
牛客网
牛客企业服务