এই সমস্যায় আউট-অফ-অর্ডার ইংরেজি শব্দের একটি স্ট্রিং দেওয়া থাকলে (যে ০-৯ ডিজিটগুলোর প্রতিনিধিত্ব করে), মূল ডিজিটগুলো অ্যাসেন্ডিং অর্ডারে আউটপুট করতে হবে।
উদাহরণ: "fviefuro" -> আউটপুট "45" (four, five)।
সমাধানের পদ্ধতি (Unique Character Counting)
কিছু ডিজিটের স্পেলিং-এ ইউনিক ক্যারেক্টার থাকে যা শুধু সেটিতে পাওয়া যায়:
z->zero(0)w->two(2)u->four(4)x->six(6)g->eight(8)
h->three(3) -eightবাদ দিয়েf->five(5) -fourবাদ দিয়েs->seven(7) -sixবাদ দিয়েo->one(1) -zero, two, fourবাদ দিয়েi->nine(9) -five, six, eightবাদ দিয়ে
উদাহরণ (C++)
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string originalDigits(string s) {
vector<int> cnt(10, 0);
for (char c : s) {
if (c == 'z') cnt[0]++;
else if (c == 'w') cnt[2]++;
else if (c == 'u') cnt[4]++;
else if (c == 'x') cnt[6]++;
else if (c == 'g') cnt[8]++;
else if (c == 'h') cnt[3]++; // three (after eight)
else if (c == 'f') cnt[5]++; // five (after four)
else if (c == 's') cnt[7]++; // seven (after six)
else if (c == 'o') cnt[1]++; // one (after zero, two, four)
else if (c == 'i') cnt[9]++; // nine (after five, six, eight)
}
// Adjust for overlaps
cnt[3] -= cnt[8]; // h in three, eight
cnt[5] -= cnt[4]; // f in five, four
cnt[7] -= cnt[6]; // s in seven, six
cnt[1] -= (cnt[0] + cnt[2] + cnt[4]); // o in one, zero, two, four
cnt[9] -= (cnt[5] + cnt[6] + cnt[8]); // i in nine, five, six, eight
string ans;
for (int i = 0; i <= 9; i++)
ans.append(cnt[i], '0' + i);
return ans;
}
};
int main() {
Solution ob;
cout << ob.originalDigits("fviefuro") << endl;
return 0;
}
ইনপুট
"fviefuro"
আউটপুট
45