You are required to write a method that takes two text documents: an anonymous letter L and text from a magazine M. Your method is to return true if L can be written using M and false otherwise.
(if a letter appears k times in L, it must appear at least k times in M. )
(Algorithm for interviewsより引用)
ヒント
マガジンMから部分文字列Lを取り出せという問いではないことに注意.
解答
#include <string>
#include <iostream>
#include <map>
using namespace std;
class Dict {
private:
map<char,int> mD;
void AddOrIncrement(char ch);
public:
Dict() {};
bool Analyze(string l,string m);
};
void Dict::AddOrIncrement(char ch) {
if( mD.find(ch) != mD.end() )
mD[ch]++;
else
mD[ch] = 1;
}
bool Dict::Analyze(string l, string m) {
mD.clear();
for( unsigned int i = 0;i < m.size();i++ ) {
AddOrIncrement(m.at(i));
}
for( unsigned int i = 0;i < l.size();i++ ) {
mD[l.at(i)]--;
if( mD[l.at(i)] < 0 )
return false;
}
return true;
}
int main() {
Dict d;
cout << d.Analyze("wanco", "wanchan coco ni oide") << endl;
cout << d.Analyze("nyanco", "wanchan coco ni oide") << endl;
return 0;
}
0 件のコメント:
コメントを投稿