输入两个字符串,问第二个字符串是否可以由第一个的部分得到?
可以的话输出剩余多少,不行则说明还缺少几个
#pragma once
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxSize = 22;
class Vol {
private:
char m_has[maxSize];
char m_need[maxSize];
int m_hasTimes[66] = { 0 };
int m_needTimes[66] = { 0 };
public:
Vol(){}
Vol(int i){
gets_s(m_has);
gets_s(m_need);
getTimes();
checkHas();
}
~Vol(){}
void getTimes() {
int len = strlen(m_has);
for (int i = 0; i < len; ++i) {
int id = getId(m_has[i]);
++m_hasTimes[id];
}
int len1 = strlen(m_need);
for (int i = 0; i < len1; ++i) {
int id = getId(m_need[i]);
++m_needTimes[id];
}
}
int getId(char ch) {
int ans = 0;
if (ch >= '0'&&ch <= '9') ans = ch - '0';
else if(ch >= 'A'&&ch <= 'Z') ans = ch - 'A' + 10;
else ans = ch - 'a' + 36;
return ans;
}
void checkHas() {
int len1 = strlen(m_need);
for (int i = 0; i < len1; ++i) {
int id = getId(m_need[i]);
if (m_hasTimes[id] >= m_needTimes[id]) {
m_needTimes[id] = 0;
}
else {
m_needTimes[id] -= m_hasTimes[id];
}
}
}
void showAns(){
int stillNeed = 0;
int len1 = strlen(m_need);
int len2 = strlen(m_has);
for (int i = 0; i < len1; ++i) {
int id = getId(m_need[i]);
if (m_needTimes[id]) {
stillNeed += m_needTimes[id];
m_needTimes[id] = 0;
}
}
if (stillNeed == 0) {
printf_s("Yes %d\n", len2 - len1);
}
else {
printf_s("No %d\n", stillNeed);
}
}
};
void testForMl() {
Vol sol(1);
sol.showAns();
}