13. String Operations
স্ট্রিং ম্যানিপুলেশন ইন্টারভিউ এবং প্রবলেম সলভিংয়ে খুবই গুরুত্বপূর্ণ। সব উদাহরণ Logic এবং Complexity Analysis সহ দেওয়া হলো।
1. স্ট্রিং রিভার্স (String Reversal)
🛠 কর্মপদ্ধতি (Step-by-Step Logic)
- স্ট্রিংটিকে ক্যারেক্টার অ্যারেতে রূপান্তর করুন।
- টু-পয়েন্টার অ্যাপ্লোচ ব্যবহার করে শুরু এবং শেষের ক্যারেক্টার অদলবদল (Swap) করুন।
- সবশেষে অ্যারেটিকে পুনরায় স্ট্রিংয়ে রূপান্তর করুন।
📊 কমপ্লেক্সিটি অ্যানালাইসিস (Complexity Analysis)
- Time Complexity: O(n)
- Space Complexity: O(n) - নতুন স্ট্রিং বা অ্যালরে তৈরি করার জন্য।
Java Implementation
java
public String reverse(String s) {
return new StringBuilder(s).reverse().toString();
}2. প্যালিনড্রোম চেক (Palindrome Check)
🛠 কর্মপদ্ধতি (Step-by-Step Logic)
- দুটি পয়েন্টার নিন:
i(শুরুতে) এবংj(শেষে)। - যদি
str[i]এবংstr[j]এক না হয়, তবে এটি প্যালিনড্রোম নয়। iএবংjএকে অপরের দিকে অগ্রসর হতে থাকবে যতক্ষণ তারা মাঝখানে না পৌঁছায়।
📊 কমপ্লেক্সিটি অ্যানালাইসিস (Complexity Analysis)
- Time Complexity: O(n)
- Space Complexity: O(1)
Python Implementation
python
def is_palindrome(s):
return s == s[::-1]3. অ্যানাগ্রাম চেক (Anagram Check)
দুটি স্ট্রিং অ্যানাগ্রাম কিনা (যেমন: "listen" এবং "silent")।
🛠 কর্মপদ্ধতি (Step-by-Step Logic)
- দুটি স্ট্রিংয়ের লেন্থ তুলনা করুন (ভিন্ন হলে সরাসরি ফলস)।
- দুটি স্ট্রিংকেই সর্ট (Sort) করুন।
- যদি সর্টেড স্ট্রিং দুটি হুবহু মিলে যায়, তবে তারা অ্যানাগ্রাম।
📊 কমপ্লেক্সিটি অ্যানালাইসিস (Complexity Analysis)
- Time Complexity: O(n log n) - সর্টিং করার জন্য।
- Optimization: ফ্রিকোয়েন্সি অ্যারে (Frequency Array) ব্যবহার করলে O(n) এ করা সম্ভব।
Java Implementation
java
public boolean isAnagram(String s1, String s2) {
if (s1.length() != s2.length()) return false;
char[] c1 = s1.toCharArray();
char[] c2 = s2.toCharArray();
java.util.Arrays.sort(c1);
java.util.Arrays.sort(c2);
return java.util.Arrays.equals(c1, c2);
}4. ক্যারেক্টার ফ্রিকোয়েন্সি (Frequency Count)
🛠 কর্মপদ্ধতি (Step-by-Step Logic)
- একটি কাউন্টার অ্যারে বা হ্যাশ ম্যাপ নিন।
- স্ট্রিংয়ের প্রতিটি ক্যারেক্টার ভিজিট করুন এবং তার কাউন্ট ১ বাড়িয়ে দিন।
📊 কমপ্লেক্সিটি অ্যানালাইসিস (Complexity Analysis)
- Time Complexity: O(n)
- Space Complexity: O(1) - যদি ক্যারেক্টার সেট ফিক্সড থাকে (যেমন: ছোট হাতের ২৬টি বর্ণ)।
IMPORTANT
স্ট্রিং ইমিউটেবল (Immutable) হওয়ার কারণে অনেক ল্যাঙ্গুয়েজে ডিরেক্ট চেঞ্জ করা যায় না, তাই StringBuilder (Java) বা লিস্ট (Python) ব্যবহা করা কার্যকর।