इस समस्या में, हमें एक स्ट्रिंग दी जाती है और हमें स्ट्रिंग के सभी अनुक्रमों को प्रिंट करना होता है। उत्पन्न सबस्ट्रिंग स्ट्रिंग के तत्वों को हटाकर बनाया जाता है लेकिन क्रम वही रहता है (यानी ऑर्डर बदला नहीं जा सकता)।
आइए विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं -
Input: xyz Output: x,y,z,xy,yz,xz,xyz
स्पष्टीकरण -उपरोक्त उदाहरण में, हम देख सकते हैं कि सबस्ट्रिंग बनाने के लिए केवल वर्ण हटा दिए गए हैं। नहीं, पुनर्व्यवस्थित होता है।
इस समस्या को हल करने के लिए कई तरीके हो सकते हैं, यहां हम तरीकों को समझने के लिए उनमें से कुछ पर चर्चा करेंगे।
एक स्ट्रिंग के तत्वों का चयन करके और अनुक्रम बनाने के लिए कुछ को समाप्त करना है। इस पद्धति में, हम सबस्ट्रिंग बनाने के लिए कुछ तत्वों को चुनेंगे और बाकी को हटा देंगे।
उदाहरण
import java.util.*; class Main{ public static ArrayList<String>subStringSeq=new ArrayList<String>(); public static void main(String[] args) { String s="pqrs"; System.out.println("All the substring found are :"); findSubString(s,""); System.out.println(subStringSeq); } public static void findSubString(String s, String ans) { if(s.length()==0){ subStringSeq.add(ans); return; } findSubString(s.substring(1),ans+s.charAt(0)) ; findSubString(s.substring(1),ans); } }
आउटपुट
पाए गए सभी विकल्प हैं -
[pqrs, pqr, pqs, pq, prs, pr, ps, p, qrs, qr, qs, q, rs, r, s, ]
दूसरी विधि स्ट्रिंग पर पुनरावृति हो सकती है और सबस्ट्रिंग उत्पन्न कर सकती है। और सबस्ट्रिंग उत्पन्न करने के लिए अनुक्रम के पात्रों को छोड़ना। यहां, हम सबस्ट्रिंग को स्टोर करने के लिए एक सूची का उपयोग करेंगे। और जांचें कि जो क्रम मिला है वह पहले से ही मिला है या नहीं।
उदाहरण
import java.util.HashSet; public class Main{ static HashSet<String> subString = new HashSet<>(); static void findSubString(String str){ for (int i = 0; i < str.length(); i++) { for (int j = str.length(); j > i; j--) { String sub_str = str.substring(i, j); if (!subString.contains(sub_str)) subString.add(sub_str); for (int k = 1; k < sub_str.length() - 1; k++) { StringBuffer sb = new StringBuffer(sub_str); sb.deleteCharAt(k); if (!subString.contains(sb)); findSubString(sb.toString()); } } } } public static void main(String[] args){ String s = "pqrs"; System.out.println("The subsequence is "); findSubString(s); System.out.println(subString); } }
आउटपुट
इसके बाद है
[rs, pq, qr, pr, qs, ps, prs, p, pqr, q, r, s, pqs, qrs, pqrs]
एक और विधि वर्णों को ठीक कर सकती है और सबस्ट्रिंग ढूंढ सकती है। इस पद्धति में हम एक-एक करके स्ट्रिंग के तत्वों को ठीक करेंगे और इन निश्चित वर्णों का उपयोग करके, हम बाद की खोज करेंगे। इस विधि की पुनरावर्ती कॉलिंग आवश्यक स्ट्रिंग अनुवर्ती बनाता है।
उदाहरण
class Main { static void subString(String str, int n, int index, String curr){ if (index == n){ return; } System.out.print(curr + ", "); for (int i = index + 1; i < n; i++){ curr += str.charAt(i); subString(str, n, i, curr); curr = curr.substring(0, curr.length() - 1); } } static void printSubStrings(String str){ int index = -1; String curr = ""; subString(str, str.length(), index, curr); } public static void main(String[] args){ String str = "pqrs"; System.out.println("The subStrings are :") ; printSubStrings(str); } }
आउटपुट
सबस्ट्रिंग हैं -
p, pq, pqr, pqrs, pqs, pr, prs, ps, q, qr, qrs, qs, r, rs, s