के खिलाफ स्ट्रिंग से मेल खाने के लिए रिकर्सिव फ़ंक्शन इसलिए मैं पूरे दिन इस असाइनमेंट को हल करने का प्रयास कर रहा हूं, बस इसे प्राप्त नहीं कर सकता।वाइल्डकार्ड पैटर्न
निम्नलिखित फ़ंक्शन 2 तारों को स्वीकार करता है, दूसरा (1 नहीं) संभवतः *
(तारांकन) युक्त होता है।
एक *
एक स्ट्रिंग के लिए एक स्थानापन्न (खाली, 1 वर्ण या अधिक) है, यह कोई प्रकट हो सकते हैं दिखाई देते हैं (केवल s2 में) एक बार, दो बार, अधिक या बिल्कुल नहीं, यह नहीं एक और *
(ab**c
) के निकट हो सकता है, इसे जांचने की जरूरत है।
public static boolean samePattern(String s1, String s2)
स्ट्रिंग एक ही पैटर्न के हैं तो यह सच हो जाता है।
यह रिकर्सिव होना चाहिए, किसी भी लूप, स्थिर & वैश्विक चर का उपयोग न करें। स्थानीय चर का उपयोग & विधि ओवरलोडिंग का उपयोग कर सकते हैं। charAt(i)
, substring(i)
, substring(i, j)
, length()
:
केवल इन तरीकों का उपयोग कर सकते हैं।
उदाहरण:
1: TheExamIsEasy
; 2: The*xamIs*y
→ सच
1: TheExamIsEasy
; 2: Th*mIsEasy*
→ सच
1: TheExamIsEasy
; 2: *
→ सच
1: TheExamIsEasy
; 2: TheExamIsEasy
→ सच
1: TheExamIsEasy
; 2: The*IsHard
→ गलत
मैं कम से s1
की चार के साथ वर्ण की तुलना एक के बाद एक charAt
का उपयोग कर जब तक एक तारक का सामना करना पड़ा है, तो जाँच लें कि तारांकन की तुलना द्वारा एक खाली एक है द्वारा लगातार चार (i+1
) है की कोशिश की स्थिति i
, यदि सही है - के साथ s2
& i
s1
के काउंटर के रूप में i+1
के साथ रिकर्सन जारी रखें;
यदि गलत है - दोनों के लिए काउंटर के रूप में i+1
के साथ रिकर्सन जारी रखें।
तब तक जारी रखें जब तक कि कोई अन्य तारांकन स्ट्रिंग का न हो या समाप्त न हो जाए।
मुझे पता नहीं, मेरा दिमाग चीजों का ट्रैक खो देता है, ध्यान केंद्रित नहीं कर सकता, पॉइंटर्स/संकेत? क्या मैं सही दिशा में हूं?
इसके अलावा, यह बताया गया है कि बैकट्रैकिंग तकनीक को हल करने के लिए इसका उपयोग किया जाना है।
मेरे कोड अब तक (काम नहीं करता है, यहां तक कि सैद्धांतिक रूप से):
public static boolean samePattern(String s1, String s2) {
if (s1.equals(s2) || s2 == "*") {
return true;
}
return samePattern(s1, s2, 1);
}
public static boolean samePattern(String s1, String s2, int i)
{
if (s1.equals(s2))
return true;
if (i == s2.length() - 1) // No *'s found -- not same pattern.
return false;
if (s1.substring(0, i).equals(s2.substring(0, i)))
samePattern(s1, s2, i+1);
else if (s2.charAt(i-1) == '*')
samePattern(s1.substring(0, i-1), s2.substring(0, i), 1); // new smaller strings.
else
samePattern(s1.substring(1), s2, i);
}
कुडोस, और नहीं पूरे समाधान के लिए एक मोटा गाइड है। –