AmanArora
AmanArora

Reputation: 2499

Most repeating character in a string

We are given a string , for example, take "TUOPPPPJHHTT" We wish to find out which character occurs the most number of times CONTINUOUSLY in the string and how many times. In this case, its P occurring 4 times.

I tried running a for loop as following

char[] array = S.toCharArray();
int count=1;
for(int i =1; i < S.length(); i++) {
    if(array[i] == array[i-1]) {
        count++;
    }
}

but in this approach, the problem is it will count repeated occurrences of all alphabets.

Upvotes: 4

Views: 73353

Answers (20)

R.Karthik Raja
R.Karthik Raja

Reputation: 1

In my Case INPUT will be like Binary number and the output will the most consecutive '1' count.

Input :10101010101111001
Output:4

Case 2:
Input:101010101010
Output:-1

It works for me.

 class HelloWorld 
     { 
    public static void main(String[] args)
     {
            Scanner sc=new Scanner(System.in);    
            String s=sc.nextLine();    
            int max=1,curcount=0;    
            for(int i=0;i<s.length();i++)
           {
                if(s.charAt(i)=='1')    
                    curcount++;
               else    
                    curcount=0;    
               if(max<curcount)    
                    max=curcount;    
           }    
           if(max==1)    
            System.out.println("-1");   
           else    
            System.out.println(max);    } 
    }

Upvotes: 0

vishal sharma
vishal sharma

Reputation: 190

let arr = [1,5,85,36,1,1,5,5,5,5,5,44]
let obj = {}
let newArr = []
let maxCount = 0
let maxChar = null
for(let i of arr){
    if(!obj[i]){
    obj[i] = 1
  }else{
    obj[i] ++
  }
  for(let j in obj){
    if(obj[j] > maxCount){
      maxCount = obj[j]
      maxChar = j
    }
  }
}
console.log(newArr, obj, maxCount, maxChar)

you can use this technique to fine maximum repeated character using javascript

Upvotes: 0

Wildlings
Wildlings

Reputation: 1

Simple and yet best implementation of this is below.

 public static Character repeatingChar(String str) {

    char[] array = str.toCharArray();

    int max = 1;
    int count = 1;
    char ch = ' ';
    for (var i=1; i<str.length(); i++) {
        if (array[i] == array[i - 1])
            count++;
        else
            count =1;
        if (count > max) {
            max = count;
            ch = array[i - 1];
        }

    }
    return ch;
}

Upvotes: 0

user2931058
user2931058

Reputation: 1

    Simple way of finding Max character repetition
    ----------------------------------------------
    public char FindMaxRepeatedCharacter(string s)
    {
        Dictionary<char, int> keyValues = new Dictionary<char, int>();
        foreach(char c in s)
        {
            if (keyValues.ContainsKey(c))
                keyValues[c]++;
            else
                keyValues.Add(c, 1);
        }

        var maxValue =  keyValues.Values.Max();
        return keyValues.Where(x => x.Value == maxValue).FirstOrDefault().Key;
    }

Upvotes: 0

Aswin Bahulayan
Aswin Bahulayan

Reputation: 1

A simple program to find the maximum repeated character in a string using collection.

import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class MaxCountOfString {

    public static <K, V> K getKey(Map<K, V> map, V val) {
        for (Map.Entry<K, V> each : map.entrySet()) {
            if (val.equals(each.getValue())) {
                return each.getKey();
            }
        }
        return null;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String lang = "malayalaaaaammmmmmmmmmmm";
        Map<Character, Integer> countmapper = new HashMap<>();
        int i = 0, j = 0;
        int count = 1;
        char[] ch = new char[lang.length()];
        for (int k = 0; k < ch.length; k++) {
            ch[k] = lang.charAt(k);
        }
        for (j = 0; j < lang.length(); j++) {
            count = 1;
            if (countmapper.containsKey(ch[j])) {
                continue;
            } else {
                for (i = j + 1; i < lang.length(); i++) {
                    if (lang.charAt(j) == ch[i]) {
                        count++;

                    }
                }
                if (!countmapper.containsKey(ch[j])) {
                    countmapper.put(lang.charAt(j), count);
                }
            }

        }

        Collection<Integer> values = countmapper.values();

        System.out.println("The maximum repeated character from the string " + lang + " is :"
                + getKey(countmapper, Collections.max(values)));

    }

}

Upvotes: 0

user3744342
user3744342

Reputation: 11

Return maximum occurring character in an input string SWIFT

let inputString = "testdsesatg"
var tempDic : [Character: Int] = [:]     
        for char in inputString {
            if tempDic[char] != nil {
                tempDic[char] = tempDic[char]! + 1
            }
            else{
                tempDic[char] = 1
            }
        }

we check the maximum count of dictionary values

    let checkMax  = tempDic.max{ a, b in a.value < b.value}
    let sol = tempDic.keys.filter{ tempDic[$0] == checkMax?.value}

This will also handle the situation , if in a string there exist more than 1 character that has same number of repeating characters and are maximum

Upvotes: 1

Ramnaresh Mantri
Ramnaresh Mantri

Reputation: 109

package naresh.java;

import java.util.HashMap;
import java.util.Map;

public class StringPrg {
  public static void main(String args[]){
    String str= "Ramrrnarmmmesh";
    //using hashmap to store unique character with integer count
    Map<Character,Integer> map1 = new HashMap<Character,Integer>();

    for(int k=0; k < str.length(); k++)
    {
      char currentChar = str.charAt(k);
      //to check that currentChar is not in map, if not will add 1 count for firsttime
      if(map1.get(currentChar) == null){
        map1.put(currentChar, 1); 
      } 
      /*If it is repeating then simply we will increase the count of that key(character) by 1*/
      else {
        map1.put(currentChar, map1.get(currentChar) + 1);
      }
    }
    //Now To find the highest character repeated 
    int max=0;
    char maxCharacter = 'a';//setting to a by default
    for (Map.Entry<Character, Integer> entry : map1.entrySet())
    {
        System.out.println("Key=" + entry.getKey() + ":Value" + entry.getValue());
        if(max<entry.getValue()){
            max=entry.getValue();
            maxCharacter=entry.getKey();
      }
    }
    System.out.println("Max Character=" + maxCharacter + "Max Count" + max);
  }
}

Upvotes: 3

RadhikaSharma
RadhikaSharma

Reputation: 13

You could try this code:

import java.util.Scanner;

public class HighestOccuringConsecutiveChar 
{

    public static char highestOccuringConsecutiveCharacter(String a) 
    {
        int c= 0, cNext = 0;
        char ans = '\0';
        for(int i = 0; i < a.length()-1; i++)
        {
            if(a.charAt(i) == a.charAt(i+1))
                cNext++;

            if(cNext > c)
            {
                ans = a.charAt(i);
                c = cNext;
            }
            if(a.charAt(i) != a.charAt(i))
                cNext = 0;
        if(c == 0 && cNext == 0)
            ans = a.charAt(i);
        }
        return ans;
    }

    public static void main(String[] args) 
    {
        Scanner s = new Scanner(System.in);     
        String str = new String();
        str = s.nextLine();     
        System.out.println(highestOccuringConsecutiveCharacter(str));
    }
}

Upvotes: 0

Dhiraj
Dhiraj

Reputation: 11

public static char findMaximum(String input){
    int maxCount=0;
    int count=1;
    char result='\0';
    char[] temp=input.toCharArray();
    if(temp.length==1){
        return temp[0];
    }
    for(int i=1;i<temp.length;i++){
        if(temp[i]==temp[i-1]){
            count++;
        }
        else{
            if(count>maxCount){
                maxCount=count;
                result=temp[i-1];
            }
            count=1;
        }
    }
    return result;

}

Upvotes: 0

ganesh
ganesh

Reputation: 11

 import java.util.*;
    class findmax
    {
        public static void main(String args[])
            {
                String s;
                int max=0;
                Scanner sc=new Scanner(System.in);
                System.out.println("Enter String:");
                s=sc.next();
                String s1=" ";      
                for(int i=0;i<s.length();i++)
                {
                     int count=0;
                        for(int j=i+1;j<s.length();j++){
                            if(s.charAt(i)==s.charAt(j))
                                count++;
                        } 
                    if(count>max){
                        s1=Character.toString(s.charAt(i));
                        max=count;
                }
                    else if(count==max)
                        s1=s1+" "+Character.toString(s.charAt(i));
                }

                System.out.println(s1);


            }
    }

Upvotes: 0

Amit Sahay
Amit Sahay

Reputation: 1

For Simple String Manipulation, this program can be done as:

package abc;
import java.io.*;

public class highocc 
{
        public static void main(String args[])throws IOException
        {
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Enter any word : ");
            String str=in.readLine();
            str=str.toLowerCase();
            int g=0,count;
            int ar[]=new int[26];
            char ch[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
                for(int i=0;i<ch.length;i++)
                {
                    count=0;
                    for(int j=0;j<str.length();j++)
                     {
                        char ch1=str.charAt(j);
                        if(ch[i]==ch1)
                            count++;
                     }
                   ar[i]=(int) count;
                }
                int max=ar[0];
                for(int j=1;j<26;j++)
                {
                        if(max<ar[j])
                        {
                            max=ar[j];
                            g=j;
                        }
                        else
                        {
                            max=ar[0];
                            g=0;
                        }
                }
                System.out.println("Maximum Occurence is "+max+" of character "+ch[g]);
           } 
}

Upvotes: 0

Amal Singam
Amal Singam

Reputation: 1

public static int findMaximumRepeatedChar(String str){
       int count = 0, maxCount = 0, charAt = -1;                        
       for(int i=0; i < str.length() - 1; i++){         
          if(str.charAt(i) != str.charAt(i+1)){
            if(count > maxCount){
                maxCount = count;
                charAt = i - count + 1;
            }
            count = 0;              
        }else{
            count++;
        }           
    }               
    if(charAt == -1) return -1;
    else return charAt;     
}

Upvotes: 0

Minnie
Minnie

Reputation: 1

import java.util.*;

public class HighestOccurence {

    public static void getHighestDupsOccurrancesInString(char[] arr) {
        int count = -1;
        int max = 0;
        Character result = ' ';
        // Key is the alphabet and value is count
        HashMap<Character, Integer> hmap = new HashMap<Character, Integer>();

        for (int i = 0; i < arr.length; i++) {
            if (hmap.containsKey(arr[i])) {
                hmap.put(arr[i], hmap.get(arr[i]) + 1);
            } else {
                hmap.put(arr[i], 1);
            }
        }
        for (Map.Entry<Character, Integer> itr : hmap.entrySet()) {
            // System.out.println(itr.getKey() + " " + itr.getValue());
            if (Integer.parseInt(itr.getValue().toString()) > max) {
                max = Integer.parseInt(itr.getValue().toString());
                if (hmap.containsValue(max)) {
                    result = itr.getKey();
                }
            }
        }
        System.out.print("Maximum Occured Character is '" + result + "'");
        System.out.print(" with count :" + max);

    }

    public static void main(String args[]) {

        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the String");
        String s = scan.nextLine();
        if (s.trim().isEmpty()) {
            System.out.println("String is empty");
        } else {
            char[] arr = s.toCharArray();
            getHighestDupsOccurrancesInString(arr);
        }

    }

}

Upvotes: 0

Rajesh
Rajesh

Reputation: 1

str = "AHSDFHLFHHSKSHDKDHDHHSJDKDKSDHHSDKKSDHHSDKLLDFLDFLDHAFLLLFFASHHHHHHYYYYYYYYYAAAAAAASDFJK"
max = 1
fin_max =1
for i in range(0,len(str)-1):
       if(str[i]==str[i+1]):
           max = max + 1
           if fin_max < max:
              fin_max = max
       else:
           max = 1
print fin_max

Upvotes: -2

Ashwani Sharma
Ashwani Sharma

Reputation: 37

private static void findMaxChar(string S)
{
    char[] array = S.ToLower().ToCharArray();
    int count = 1;
    int max = 0;
    char maxChar = '0';
    for (int i = 0; i < S.Length-1; i++)
    {  // Note that it should be S.length instead of S.length()
        string stringleft=S.Replace(array[i].ToString(),"");
        int countleft = S.Length - stringleft.Length;
        count = countleft;
        if (count > max)
        {  // Record current run length, is it the maximum?
            max = count;
            maxChar = array[i];
        }
    }

    // This is to account for the last run
    Console.WriteLine("Longest run: "+max+", for the character "+maxChar);
}

Upvotes: 0

justhalf
justhalf

Reputation: 9117

Each time you find different character than previous one, it means the run (consecutive repeating alphabet) is ended, and so you should note down the length of current run (i.e., the value of count) and then reset the count. At the end you can print the maximum.

char[] array = S.toCharArray()
int count = 1;
int max = 0;
char maxChar = 0;
for(int i=1; i<array.length; i++){ // Start from 1 since we want to compare it with the char in index 0
    if(array[i]==array[i-1]){
        count++;
    } else {
        if(count>max){  // Record current run length, is it the maximum?
            max=count;
            maxChar=array[i-1];
        }
        count = 1; // Reset the count
    }
}
if(count>max){
    max=count; // This is to account for the last run
    maxChar=array[array.length-1];
}
System.out.println("Longest run: "+max+", for the character "+maxChar); // Print the maximum.

Upvotes: 5

ptdecker
ptdecker

Reputation: 11

You can use the ternary operator to create a simplified version of @justhalf's solution. Plus, you don't need to convert the string to a character array first if you use the 'charAt()' method.

int  count   = 1;
int  max     = 1;
char maxChar = S.charAt(1);

for(int i = 1; i < S.length(); i++) {
    count = (S.charAt(i) == S.charAt(i - 1)) ? (count + 1) : 1;
    if (count > max) {
        max = count;
        maxChar = S.charAt(i);
    }
}

System.out.println("Longest run: "+max+", for the character "+maxChar); 

Note that this code assumes S is not empty.

Upvotes: 1

Manmohan Soni
Manmohan Soni

Reputation: 6621

Please try this code i made it for me.........

public static String getMaxRepeatedChar(String txt) {
        if ((txt != null)) {
            HashMap<Character, Integer> hash = new HashMap<Character, Integer>();
            char maxCh = 1;
            int maxCnt = 0;
            for (char ch : txt.toCharArray()) {
                if (hash.containsKey(ch)) {
                    int i = hash.get(ch);
                    hash.put(ch, i + 1);
                    if (maxCnt < (i + 1)) {
                        maxCh = ch;
                        maxCnt = 1 + i;
                    }

                } else {
                    hash.put(ch, 1);
                    if (maxCnt < 1) {
                        maxCh = ch;
                        maxCnt = 1;
                    }
                }

            }
            return "Most Repeted character : " + maxCh + " and Count : "
                    + maxCnt;
        }

        return null;
    }

Upvotes: 0

Ravi K Thapliyal
Ravi K Thapliyal

Reputation: 51721

Here's a more generic solution that works for all characters; alphanumeric or special, doesn't matter.

private String findMaxChar(String str) {
    char[] array = str.toCharArray();
    int maxCount = 1;
    char maxChar = array[0];
    for(int i = 0, j = 0; i < str.length() - 1; i = j){
        int count = 1;
        while (++j < str.length() && array[i] == array[j]) {
            count++;
        }
        if (count > maxCount) {
            maxCount = count;
            maxChar = array[i];
        }
    }
    return (maxChar + " = " + maxCount);
}

System.out.println(findMaxChar("T"));
System.out.println(findMaxChar("TDD"));
System.out.println(findMaxChar("WWW"));
System.out.println(findMaxChar("NOREPEATS"));
System.out.println(findMaxChar("122333444455555"));
System.out.println(findMaxChar("abc33++$$$_###*ABCC"));

Output :

T = 1
D = 2
W = 3
N = 1 // First Character (if no repeats)
5 = 5
$ = 3


If you want to print all the characters that have maximum occurrences, use a Set to collect them as:

private static String findMaxChar(String str) {
    char[] array = str.toCharArray();
    Set<Character> maxChars = new LinkedHashSet<Character>();

    int maxCount = 1;
    maxChars.add(array[0]);

    for(int i = 0, j = 0; i < str.length() - 1; i = j){
        int count = 1;
        while (++j < str.length() && array[i] == array[j]) {
            count++;
        }
        if (count > maxCount) {
            maxCount = count;
            maxChars.clear();
            maxChars.add(array[i]);
        } else if (count == maxCount) {
            maxChars.add(array[i]);
        }
    }

    return (maxChars + " = " + maxCount);
}

Output :

[T] = 1
[D] = 2
[W] = 3
[N, O, R, E, P, A, T] = 1
[5] = 5
[$, #] = 3 // All Characters (in case of a tie)

Upvotes: 4

newuser
newuser

Reputation: 8466

Try this,

        char[] array = input.toCharArray();
        Arrays.sort(array);

        int max = 0;
        int count = 1;
        char temp = array[0];
        for (char value : array)
        {
            if (value == temp)
            {
                count++;
            }
            else
            {
                temp = value;
                if (count > max)
                {
                    max = count;
                }
                count = 1;
            }
        }

        if(count > max)
        {
            max = count;
        }
    System.out.println("count : "+max);

Upvotes: 0

Related Questions