A4b4d3 में स्ट्रिंग aaaabbbbddd बारी करें

मैं साक्षात्कार के सवालों का अभ्यास करने के लिए एक प्रमुख शुरुआत करने की कोशिश कर रहा हूं और मैं इस पर आया:

A4b4d3 में स्ट्रिंग aaaabbbbddd बारी करें

आप मूल रूप से मौजूदा स्ट्रिंग को प्रत्येक अद्वितीय चरित्र घटना और चरित्र के समय की संख्या के साथ एक स्ट्रिंग में परिवर्तित करना चाहते हैं।

यह मेरा समाधान है लेकिन मुझे लगता है कि इसे कुछ और सुरुचिपूर्ण में परिष्कृत किया जा सकता है:

    String s = "aaaabbbbddd";
    String modified = "";
    int len = s.length();
    char[] c = s.toCharArray();
    int count = 0;
    for (int i = 0; i < len; i++) {
        count = 1;
        for (int j = i + 1; j < len; j++) {
            if (c[i] == ' ') {
                break;
            }
            if (c[i] == c[j]) {
                count++;
                c[j] = ' ';
            }

        }
        if (c[i] != ' ') {
            modified += c[i] + "" +  count; 

        }
    }
    System.out.println(modified);

क्या किसी के पास समाधान के लिए कोई अन्य सुझाव है?

0
यह प्रश्न ऑफ़-विषय प्रतीत होता है क्योंकि यह वास्तव में कोड समीक्षा के लिए अनुरोध है।
जोड़ा लेखक Stephen C, स्रोत
इस विषय पर क्या होगा? इसमें एक बग है? केवल आंशिक कोड स्निपेट होने के बाद? यह अभी भी कोडिंग प्रश्न की तरह लगता है, इसे एक पहेली की तरह सोचें। मैं एक्स-1 लाइनों में उस कोड को लिख सकता हूं ... ओह हाँ? मैं एक्स -5 लाइनों में उस कोड को लिख सकता हूं, और इसी तरह।
जोड़ा लेखक Kelly S. French, स्रोत
इस प्रकार का प्रश्न कोड समीक्षा पर है
जोड़ा लेखक Paul Samsotha, स्रोत
तार हमेशा इस तरह से आ रहे हैं? aaabbbdddaa की तरह कुछ नहीं? उस स्थिति में, क्या आप a5b3d3 या a3b3d3a2 की अपेक्षा करेंगे?
जोड़ा लेखक emecas, स्रोत

5 उत्तर

यहां कोड है जिसकी मैंने कोशिश की थी।

मुझे लगता है कि आप इससे सरल कोड नहीं मांग सकते हैं।

    String s = "aaaabbbbddd", modified = "";
    int len = s.length(),  i = 0,  j = i + 1,  count = 1;
    char[] c = s.toCharArray();
    for (; i < len; i = j) {
        count = 1;
            for (; j < len; j++) 
                 if (c[i] == c[j]) 
                 count++;
                    else {
                    j++;
                    break;
                    }
        modified += c[i] + "" + count;
    }
    System.out.println(modified);
0
जोड़ा

Employ a Map instead. Attempt to insert the new character into the map; if it already exists, then increment the value for that particular character.

उदाहरण:

Map countMap = new HashMap<>();
if(!countMap.containsKey('a')) {
    countMap.put('a', 1);
} else {
    countMap.put('a', countMap.get('a') + 1);
}
0
जोड़ा

मेरा संस्करण

    StringBuilder sb = new StringBuilder();
    int count = 0;
    char last = s.charAt(0);
    for(char c : s.toCharArray()) {
        if (c == last) {
            count++;
        } else {
            sb.append(last).append(count);
            count = 0;
            last = c;
        }
    }
    if (count != 0) {
        sb.append(last).append(count);
    }
    System.out.println(sb);
0
जोड़ा

मेरा समाधान यहाँ है

public String countChars(String in){
 LinkedHashMapMap map = new LinkedHashMap();
 for(char c: in.toCharArray()){
   Integer count =  map.get(c);
   if(count==null){
    count=0;
   }
   count++;
   map.put(c,count);
 }
 String out ="";
 for(Entry e : map.entrySet()){
    out += e.getKey()+e.getValue();
 }
 return out;
}
0
जोड़ा

@ माकोटो के अद्भुत उत्तर को जोड़ने के लिए, आपकी स्थिति में, मैं हैश मैप के बजाय TreeMap का उपयोग करूंगा। एक TreeMap आपको वर्णानुक्रम में प्रिंट करने की अनुमति देगा। मैंने आपको यह दिखाने के लिए प्रिंट कोड भी जोड़ा है कि यह कैसा दिखाई देगा। यह पूरी तरह से चलाने योग्य है।

import java.util.Map;
import java.util.TreeMap;

public class MapPractice {

    public static void main(String[] args) {
        Map map = new TreeMap<>();

        String blah = "aaaabbbbddd";

        for (int i = 0; i < blah.length(); i++) {
            char c = blah.charAt(i);
            if (!map.containsKey(c)) {
                map.put(c, 1);
            } else {
                map.put(c, (map.get(c) + 1));
            }
        } 

        for (Map.Entry entry: map.entrySet()) {
            System.out.print(entry.getKey() + "" + entry.getValue());
        }
    }
}

Output with TreeMap: a4b4d3

हैश मैप के साथ आउटपुट: d3b4a4

0
जोड़ा