Reputation: 2499
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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