रेडिओद्वारे सर्व लॅरी बदली कशी शोधावी जॉब इंटरव्ह्यू प्रोग्रामिंगसाठी कोडिंग प्रश्नांपैकी एक आहे. हा प्रश्न मी पहिल्यांदा माझ्या कॉलेज परीक्षेदरम्यान पाहिला जेव्हा आम्हाला C किंवा C ++ मध्ये कोड सोडवायला सांगितले गेले. “तेव्हापासून मी हा प्रश्न अनेक वेळा विविध लेखी परीक्षांमध्ये पाहिला आहे” जावा मुलाखती कनिष्ठ विकासकाच्या पदासाठी. उमेदवाराला पुनरावृत्ती समजते की नाही हे तपासणे हा एक चांगला प्रश्नच नाही तर नवशिक्यांसाठी जावा प्रोग्रामिंग व्यायामांपैकी एक आहे.

आपल्याला सहसा अशी पद्धत लिहायला सांगितले जाईल जी एक ओळ स्वीकारते – सर्व बदली प्रिंट करते किंवा सर्व बदल बदलू शकते
यादी कनिष्ठ विकासकाच्या पदासाठी. तुम्ही ज्या कंपनीची मुलाखत घेत आहात त्यावर अवलंबून, ते तुम्हाला IDE: Eclipse किंवा NetBeans सह कोड करण्यास सांगू शकतात किंवा फक्त साध्या कागदावर लिहू शकतात, म्हणून दोघांसाठी तयार राहा.

या समस्येचे निराकरण करण्याचे दोन मुख्य मार्ग आहेत: रिंग किंवा पुनरावृत्ती वापरणे आणि दुसरा संवादकाराची अपेक्षा आहे. कारण रिकर्सन ही एक जटिल प्रोग्रामिंग संकल्पना आहे, प्रत्येक प्रोग्रामरला सोडवणे सोपे नाही, खासकरून जर तुम्ही दररोज कोड करत नसाल किंवा आवश्यक कोड अर्थ नसेल.

उपाय 1 – पुनरावृत्ती և लूप वापरून या ओळीतील सर्व अंतिम बदल

आता समस्येकडे परत. रूपांतरण वर्ण लेआउटचा संदर्भ देते, परंतु ते स्थिती विचारात घेते, म्हणजे आपल्याकडे स्ट्रिंग असल्यास “दूर” मग त्यात फक्त 2 बदल होतील “दूर” आणि “बा”, कारण दोन ओळींमधील प्रतिमेची स्थिती वेगळी आहे.

त्याचप्रमाणे स्ट्रिंग ऑफ साठी n: पात्र आहेत ! n: (फॅक्टर एन) प्रतिस्थापन शक्य आहे, उदाहरणार्थ, “xyz” सारख्या 3-वर्ण स्ट्रिंगसाठी 6 संभाव्य भिन्नता आहेत, xyz, xzy, yxz, yzx, zxy, zyx, आमच्या उदाहरणाप्रमाणे.

मी तुम्हाला सांगितल्याप्रमाणे, या समस्येचे निराकरण करण्याचे दोन मार्ग आहेत, लूप (पुनरावृत्ती अल्गोरिदम) किंवा पुनरावृत्ती वापरणे, परंतु सर्वात मोहक उपाय म्हणजे “नोड” आणि “पुनरावृत्ती” यांचे संयोजन.

आठवत असेल तर तथ्यात्मक समस्या आपणास माहित आहे की फॅक्टोरियल नैसर्गिकरित्या पुनरावृत्ती आहे, म्हणजेच n चे फॅक्टोरियल हे n * फॅक्टोरियलशिवाय काही नाही, n -1. त्याचप्रमाणे, रूपांतरणे देखील एक पुनरावृत्ती समस्या आहे, उदाहरणार्थ, n वर्ण बदलणे हे एक अक्षर निश्चित करण्यापेक्षा अधिक काही नाही և n – 1 वर्णांच्या बदलीची गणना करणे, उदाहरणार्थ, जेव्हा “xyz”, आपण निराकरण करू शकता “x” և गणना प्रतिस्थापन “յզ”,

सर्व स्ट्रिंग रिप्लेसमेंटची गणना करण्यासाठी, आपल्याला सर्व वर्णांसाठी हा व्यायाम एक एक करून पुन्हा करणे आवश्यक आहे. चित्रात पळवाट दिसते. अशा प्रकारे, हे समाधान दिलेल्या नोरीचे सर्व रूपांतरण मुद्रित करण्यासाठी “नोड” वापरते.

अभिप्रायाच्या बाबतीत, सर्वात महत्वाचा मुद्दा खालीलप्रमाणे आहे बेस केस, कारण ते पुनरावृत्ती कॉल थांबवण्यासाठी जबाबदार आहे. जर तुमच्याकडे मोठा व्यवसाय नसेल तर तुमची योजना अखेरीस संपेल java.lang.StackOverFlowError:,

या प्रकरणात, आमचे मुख्य कार्य रिक्त ओळ बदलणे आहे, जे रिक्त रेषेशिवाय काहीच नाही. प्रत्येक कॉलनंतर, समस्या सेट मुख्य प्रकरणात և इंच कमी होते, जेव्हा ती तेथे पोहोचते तेव्हा, ढीग खाली फिरू लागते և result परिणामाची गणना करा.

सर्व स्ट्रिंग परवानग्या छापण्यासाठी जावा प्रोग्राम

पुनरावृत्ती अल्गोरिदम वापरून सर्व ओळ पर्याय छापण्यासाठी आमचा नमुना जावा येथे आहे. या समस्येचे निराकरण करण्यासाठी, ते “नोड” आणि “पुनरावृत्ती” कॉल वापरते. हे वापरून आपल्या अंमलबजावणीचे तपशील लपवण्याचे तंत्र देखील दर्शवते खाजगी पद्धत एपीआय म्हणून अधिक स्वच्छ सार्वजनिक पद्धत शोधणे. आमच्या समाधानामध्ये आमच्याकडे परिवर्तनाच्या दोन पद्धती आहेत: एक सार्वजनिक आणि दुसरी खाजगी.

पहिली पद्धत स्वच्छ आहे – क्लायंटच्या अधीन आहे, परंतु दुसरी पद्धत आपल्याला स्ट्रिंग इंटरमीडिएट बदल ठेवण्यासाठी वापरल्या जाणाऱ्या perm पॅरामीटरचे प्रारंभिक मूल्य म्हणून रिक्त स्ट्रिंग पास करणे आवश्यक आहे.

जर तुम्ही ही पद्धत ग्राहकामध्ये शोधली तर त्याला यात रस असेल रिक्त दोर, अंमलबजावणीचा भाग असल्याने, लपवणे चांगले आहे – त्यातून सुटका करा, जेव्हा तुमच्याकडे या समस्येचे निराकरण करण्यासाठी अधिक चांगले अल्गोरिदम असेल, तेव्हा तुम्ही व्यायाम म्हणून काय म्हणाल?

/**
  * Java program to find all permutations of a given String using recursion. 
  * For example, given a String "XYZ", this program will print 
  * all 6 possible permutations of
  * input e.g. XYZ, XZY, YXZ, YZX, ZXY, XYX
  *
  * @author Javin Paul
  */
public class StringPermutations {

    public static void main(String args[]) {
        permutation("123");
    }

   
 /*
  * A method exposed to client to calculate permutation of String in Java. 
  */
   public static void permutation(String input){
          permutation("", input);
   }

   /*
    * Recursive method which actually prints all permutations
    * of given String, but since we are passing an empty String
    * as current permutation to start with,
    * I have made this method private and didn't exposed it to client. 
    */
   private static void permutation(String perm, String word) {
        if (word.isEmpty()) {
            System.err.println(perm + word);

        } else {
            for (int i = 0; i < word.length(); i++) {
                permutation(perm + word.charAt(i), word.substring(0, i) 
                                + word.substring(i + 1, word.length()));
            }
        }

    }
}

Output:
123
132
213
231
312
321

इतर सर्व गोष्टींप्रमाणे, सराव हा तुमचा मित्र आहे, दररोज असे कोडिंग व्यायाम करणे, प्रोग्रामिंग कोडी सोडवणे the यूलर प्रोजेक्ट सारख्या वेबसाइटवर अधिक अत्याधुनिक सॉफ्टवेअर असणे, TopCoder तुम्हाला तुमच्यावर विश्वास निर्माण करण्यास मदत करेल: कोडिंग समस्या. सोडवण्याची कौशल्ये.

आपण क्लासिकची मदत देखील घेऊ शकता कोडिंग मुलाखत अभ्यासक्रम आणि पुस्तके कोडिंग मुलाखतीमध्ये चांगले वागण्यासाठी कोडिंग मुलाखत कशी क्रॅक करावी

कोड स्पष्टीकरण.

स्ट्रिंग रिप्लेसमेंटची गणना करण्यासाठी संपूर्ण कोड आत आहे परिवर्तन (स्ट्रिंग परम, स्ट्रिंग शब्द) पद्धत, मी हेतुपुरस्सर ही पद्धत खाजगी केली कारण अतिरिक्त पॅरामीटर जे मी प्रारंभिक बदली मूल्य म्हणून पास करतो.

हे क्लायंटकडून कार्यप्रदर्शन तपशील लपवण्याचे तंत्र दर्शवते – क्लायंटला क्लीनर API दाखवते, उदाहरणार्थ, फक्त रूपांतरण (स्ट्रिंग इनपुट) पद्धत, रिक्त वायर ट्रान्सफर हे कामगिरीचे तपशील आहे g कुरूप जेव्हा ग्राहकाला प्रत्येक वेळी बदलीची गणना करणे आवश्यक असते तेव्हा जावे लागते. आपण रिक्त कॉर्डपासून मुक्त होऊन पासवर्ड सुधारू शकता की नाही हे पाहणे आपल्यासाठी एक व्यायाम आहे.

एक अल्गोरिदम म्हणजे एका अक्षराचा रेकॉर्ड ठेवणे आणि नंतर इतरांच्या प्रतिस्थापनांची गणना करणे यापेक्षा अधिक काही नाही. कार्यक्रमाचे सार खालील कोड स्निपेटमध्ये आहे.

 for (int i = 0; i < word.length(); i++) {
   permutation(perm + word.charAt(i), word.substring(0, i) 
                    + word.substring(i + 1, word.length()));
}

येथे आपल्याकडे एक लूप आहे जो स्ट्रिंगच्या प्रत्येक वर्णातून जाणे आवश्यक आहे, उदाहरणार्थ, “123” इनपुटसाठी हे लूप तीन वेळा कार्य करेल. प्रत्येक पुनरावृत्तीसह आम्ही स्वतंत्रपणे कार्य करण्यासाठी पुनरावृत्ती कॉल करतो, म्हणजेच परिवर्तन (स्ट्रिंग परम, स्ट्रिंग शब्द) ती पद्धत जिथे पहिला पॅरामीटर परिणाम साठवण्यासाठी वापरला जातो.

1 ली पुनरावृत्ती नंतर अनुज्ञेय (रूपांतरण () पद्धतीचा पहिला मापदंड असेल: “” + 1: जसे आपण करतो word.charAt (i) և मी शून्य आहे पुढे, आम्ही ते वर्ण काढून टाकतो the आम्ही उर्वरित वर्ण परत प्रतिस्थापन मोडमध्ये देतो, उदाहरणार्थ (23) पहिल्या पुनरावृत्ती मध्ये.

कॉलबॅक मुख्य अक्षरापर्यंत पोहोचल्यावर संपतो, म्हणजेच, जेव्हा उर्वरित शब्द रिक्त होतो, तेव्हा “परवानगी” सेटिंगमध्ये छपाईसाठी वैध बदल असतो. आपण इच्छित असल्यास, आपण ड्रॉप डाउन सूचीमध्ये देखील जतन करू शकता.

हे अल्गोरिदम काय करते ते दृश्यमानपणे दर्शवणारे एक छान आकृती आहे.

जावा उदाहरणामध्ये सर्व लाइन रिप्लेसमेंट प्रिंट करा

हे सर्व जोडलेले आहे पुनरावृत्ती वापरून जावामध्ये सर्व स्ट्रिंग रिप्लेसमेंट कसे शोधायचेजावा मुलाखतीसाठी हा एक उत्तम व्यायाम कार्यक्रम आहे. दुसरा उपाय शोधण्याचा प्रयत्न का करू नये? आपण या अल्गोरिदमची जटिलता मोजू शकता का? n *! n: कारण लूप n वेळा कार्य करेल, each प्रत्येक n साठी आम्ही इनपुट पद्धत म्हणू.

तसेच, काही JUnit चाचणी प्रकरणे कशी लिहावी हे पाहण्यासाठी हे समाधान वेगवेगळ्या इनपुटसाठी काम करते, जसे की रिक्त ओळ, एकल ओळ, एकाधिक अक्षरे रेखा, डुप्लीकेट ओळ इत्यादी. JUnit चाचण्या लिहिताना व्यावहारिक बनणे ही एक चांगली प्रथा आहे.

तुम्हाला अशा आणखी एन्कोडिंग प्रश्नांमध्ये स्वारस्य असल्यास, तुम्ही विविध जावा मुलाखतींमधून गोळा केलेले खालील मुलाखत प्रश्न तपासू शकता.

  • जावा मुलाखतींमधून 20 स्ट्रिंग-आधारित कोडिंग समस्या [solution]
  • जावा मुलाखतींमधून एआर-आधारित कोडिंग प्रश्न [solution]
  • दोन ओळी निरक्षर आहेत की नाही हे कसे तपासायचे? [solution]
  • दिलेल्या ओळीत डुप्लिकेट शब्द कसे शोधायचे? [solution]
  • ही केबल जावामध्ये पॅलिंड्रोम आहे की नाही हे कसे तपासायचे? [solution]
  • जावामध्ये या स्ट्रिंगचे पहिले अद्वितीय पात्र कसे प्रिंट करावे? [solution]
  • पुनरावृत्ती न वापरता जावामधील व्होल्टेज कसे उलट करावे? [solution]
  • स्ट्रिंगमध्ये या प्रतिमेचे स्वरूप कसे मोजावे? [solution]