华为-2019-消除重复的数字

题目描述:给定一个正整数,给出消除重复数字以后最大的整数

输入描述:正整数,注意考虑长整数

输出描述:消除重复数字以后的最大整数

输入样例:423234

输出样例:432

 

方案:将输入的整数按照字符串str来处理,给定一个保存结果的字符串变量res,res初始值为str[0];

            然后依次遍历str,在res中查找有无相同的对应的字符,若字符相同假定其在res中的位置为t;

            则判断t+1位置上的字符是否大于t位置上的字符,若大于,则应将t位置上的字符移除,在res末尾加上该字符。

//=============消除重复的数字===============
int main(){
    string str;
    
    while (cin >> str){
        string res;
        res = str[0];
        
        for (int i = 1; i < str.size(); i++){

            if (res.find(str[i]) == string::npos){  //注意未找到时的判断条件
                res += str[i]; 
            }
            else{
                int t = res.find(str[i]);
                if (res[t] < res[t + 1]){
                    res.erase(t, 1);  //从t位置开始,移除1个字符
                    res += str[i];
                }
            }

        }
        cout << res << endl;

    }


    return 0;
}
 

总结:

string中find()、erase()函数的使用

参考博客:

https://blog.csdn.net/qq_33933704/article/details/79188028

string 在C++中的使用:https://blog.csdn.net/Wchenchen0/article/details/81042596

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值