একটি স্ট্রিং (অক্ষর ও সংখ্যা মিশ্রিত) দেওয়া আছে। স্ট্রিং-এ থাকা সবচেয়ে লম্বা সংখ্যা (সর্বোচ্চ ডিজিট সিকোয়েন্স) বের করতে হবে।
উদাহরণ
ইনপুট: "code001tutorials34124point"
আউটপুট: 34124
ব্যাখ্যা: স্ট্রিংয়ের সংখ্যাগুলো: 001 (দৈর্ঘ্য ৩), 34124 (দৈর্ঘ্য ৫) → সবচেয়ে লম্বা 34124।
অ্যালগরিদম
- স্ট্রিং ট্রাভার্স করুন।
- যখন ডিজিট পাওয়া যায়, কাউন্ট শুরু করুন (
isdigit())। - নন-ডিজিট পাওয়া যাওয়া পর্যন্ত কাউন্ট চালিয়ে যান।
- প্রতিটি সংখ্যা সিকোয়েন্সের জন্য দৈর্ঘ্য এবং স্টার্ট পজিশন স্টোর করুন।
- সর্বোচ্চ দৈর্ঘ্যের সিকোয়েন্সটি রিটার্ন করুন (
substr)।
C++ প্রোগ্রাম
#include <iostream>
#include <cctype>
using namespace std;
string findLongestNumber(string str, int l) {
int count = 0, max = 0, maxLenPos = -1, maxLen = 0;
for (int i = 0; i < l; i++) {
count = 0;
maxLen = 0;
if (isdigit(str[i]))
maxLenPos = i;
while (i < l && isdigit(str[i])) {
count++; i++; maxLen++;
}
if (count > max) {
max = count;
} else {
maxLenPos = maxLenPos; // unchanged
maxLen = maxLen; // unchanged
}
}
return str.substr(maxLenPos, maxLen);
}
int main() {
string str = "code001tutorials34124point";
int l = str.length();
cout << "The longest length number in string is " << findLongestNumber(str, l);
return 0;
}
আউটপুট
The longest length number in string is 34124
ব্যাখ্যা
isdigit()<cctype>-এ আছে।whileলুপ দিয়ে সক্রিয় ডিজিট সিকোয়েন্স স্কিপ করা হয়।maxLenPosএবংmaxLenদিয়ে বেস্ট সিকোয়েন্স ট্র্যাক করা হয়।substr(pos, len)দিয়ে সাবস্ট্রিং এক্সট্র্যাক্ট।
কমপ্লেক্সিটি
- টাইম:
O(n)— স্ট্রিং একবার ট্রাভার্স। - স্পেস:
O(1)এক্সট্রা (আউটপুট বাদে)।
এজ কেস
- স্ট্রিং-এ কোনো ডিজিট নেই → খালি স্ট্রিং রিটার্ন।
- একই দৈর্ঘ্যের একাধিক সংখ্যা হলে প্রথমটিই রিটার্ন হবে (লজিক সামঞ্জস্য করতে পারেন)।