2021-09-26楷登电子第一题字符串修改

该博客探讨了一种字符串转换问题,其中源字符串s和目标字符串t均由升序排列的大写字母组成。通过删除连续重复字符的方式,计算使s转变为t所需的最小删除步数。如果无法完成转变,则返回-1。文章涉及字符串处理和算法设计,是理解字符串操作和编辑距离问题的良好实例。
摘要由CSDN通过智能技术生成

现有一个源字符串s,目标字符串t,它们都由升序排列的大写字母组成。
现在按照如下规则将s转变为t,如果s中有连续的相同字符,那么可以删除两个或以上该字符,直到s和t完全相同。
输入描述:
第一行为源字符串,由升序排列的大写字母组成。
第二行为目标字符串,由升序排列的大写字母组成。
输出描述:
输出完成转变所需最少的删除步数,如果无法完成转变,则输出-1。
有序的条件很关键

#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
int help(string& s,string& t){
    unordered_map<char,int> maps, mapt;
    for(char&c : s) maps[c]++;
    for(char&c : t) mapt[c]++;
    int res = 0;
    for(char&c : s){
        if (maps[c] - mapt[c] >= 2){
            res++ ;
            maps[c] = 0;
            mapt[c] = 0;
        }else if(maps[c] - mapt[c] == 0){ 
            continue;
        }else{
            return -1;
        }
    }
    return res;
}
int main( ){
    string s, t;
    cin >> s;
    cin >> t;
    cout << help(s, t);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值