Java compressing Strings

前端 未结 20 1018
误落风尘
误落风尘 2020-11-29 09:24

I need to create a method that receives a String and also returns a String.

Ex input: AAABBBBCC

Ex output: 3A4B2C

Well, this is quite embarrassing a

相关标签:
20条回答
  • 2020-11-29 10:03

    The answers which used Map will not work for cases like aabbbccddabc as in that case the output should be a2b3c2d2a1b1c1.

    In that case this implementation can be used :

    private String compressString(String input) {
            String output = "";
            char[] arr = input.toCharArray();
            Map<Character, Integer> myMap = new LinkedHashMap<>();
            for (int i = 0; i < arr.length; i++) {
                if (i > 0 && arr[i] != arr[i - 1]) {
                    output = output + arr[i - 1] + myMap.get(arr[i - 1]);
                    myMap.put(arr[i - 1], 0);
                }
                if (myMap.containsKey(arr[i])) {
                    myMap.put(arr[i], myMap.get(arr[i]) + 1);
                } else {
                    myMap.put(arr[i], 1);
                }
            }
    
            for (Character c : myMap.keySet()) {
                if (myMap.get(c) != 0) {
                    output = output + c + myMap.get(c);
                }
            }
    
            return output;
        }
    
    0 讨论(0)
  • 2020-11-29 10:06

    The code below will ask the user for user to input a specific character to count the occurrence .

    import java.util.Scanner;
    
    class CountingOccurences {
    
    public static void main(String[] args) {
    
        Scanner inp = new Scanner(System.in);
    
        String str;
        char ch;
        int count=0;
    
        System.out.println("Enter the string:");
        str=inp.nextLine();
        System.out.println("Enter th Char to see the occurence\n");
        ch=inp.next().charAt(0);
    
        for(int i=0;i<str.length();i++)
        {
                    if(str.charAt(i)==ch)
            {
                count++;
                    }
        }
    
            System.out.println("The Character is Occuring");
            System.out.println(count+"Times");
    
    
    }
    
    }
    
    0 讨论(0)
  • 2020-11-29 10:07
    public class StringCompression {
        public static void main(String... args){
            String s="aabbcccaa";
            //a2b2c3a2
    
            for(int i=0;i<s.length()-1;i++){
                int count=1;
                while(i<s.length()-1 && s.charAt(i)==s.charAt(i+1)){
                    count++;
                    i++;
                }
                System.out.print(s.charAt(i));
                System.out.print(count);
            }
            System.out.println(" ");
        }
    }
    
    0 讨论(0)
  • 2020-11-29 10:08

    You can do that using the following steps:

    • Create a HashMap
    • For every character, Get the value from the hashmap -If the value is null, enter 1 -else, replace the value with (value+1)
    • Iterate over the HashMap and keep concatenating (Value+Key)
    0 讨论(0)
  • 2020-11-29 10:08

    It may help you.

    public class StringCompresser
    {
    public static void main(String[] args)
    {
        System.out.println(compress("AAABBBBCC"));
        System.out.println(compress("AAABC"));
        System.out.println(compress("A"));
        System.out.println(compress("ABBDCC"));
        System.out.println(compress("AZXYC"));
    }
    
    static String compress(String str)
    {
        StringBuilder stringBuilder = new StringBuilder();
        char[] charArray = str.toCharArray();
        int count = 1;
        char lastChar = 0;
        char nextChar = 0;
        lastChar = charArray[0];
        for (int i = 1; i < charArray.length; i++)
        {
            nextChar = charArray[i];
            if (lastChar == nextChar)
            {
                count++;
            }
            else
            {
                stringBuilder.append(count).append(lastChar);
                count = 1;
                lastChar = nextChar;
    
            }
        }
        stringBuilder.append(count).append(lastChar);
        String compressed = stringBuilder.toString();
    
        return compressed;
    } 
    }
    

    Output:

    3A4B2C
    3A1B1C
    1A
    1A2B1D2C
    1A1Z1X1Y1C
    
    0 讨论(0)
  • 2020-11-29 10:09

    consider the below Solution in which the String s1 identifies the unique characters that are available in a given String s (for loop 1), in the second for loop build a string s2 that contains unique character and no of times it is repeated by comparing string s1 with s.

    public static void main(String[] args) 
    {
        // TODO Auto-generated method stub
    
        String s = "aaaabbccccffffdeee";//given string
        String s1 = ""; // string to identify how many unique letters are available in a string
        String s2=""; //decompressed string will be appended to this string
        int count=0;
        for(int i=0;i<s.length();i++) {
            if(s1.indexOf(s.charAt(i))<0) {
                s1 = s1+s.charAt(i);
            }
        }
        for(int i=0;i<s1.length();i++) {
            for(int j=0;j<s.length();j++) {
                if(s1.charAt(i)==s.charAt(j)) {
                    count++;
                }
            }
            s2=s2+s1.charAt(i)+count;
            count=0;
        }
    
        System.out.println(s2);
    }
    
    0 讨论(0)
提交回复
热议问题