现有一个源字符串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;
}