大多数重复字符串中的字符

时间:2013-10-25 01:23:28

标签: java string

我们给了一个字符串,例如,取“TUOPPPPJHHTT” 我们希望找出字符串中连续发生的次数最多的次数和次数。 在这种情况下,它的P出现4次。

我尝试按以下方式运行for循环

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

但是在这种方法中,问题在于它将计算所有字母表的重复出现次数。

19 个答案:

答案 0 :(得分:5)

每次找到与前一个字符不同的字符时,表示运行(连续重复字母表)结束,因此您应记下当前运行的长度(即count的值)然后重置计数。最后,您可以打印最大值。

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.

答案 1 :(得分:2)

这是一个更通用的解决方案,适用于所有字符;字母数字或特殊,无所谓。

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"));

输出

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

<小时/> 如果要打印出现次数最多的所有字符,请使用Set将其收集为:

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);
}

输出

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

答案 2 :(得分:1)

您可以使用三元运算符创建@ justhalf解决方案的简化版本。另外,如果使用'charAt()'方法,则不需要先将字符串转换为字符数组。

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); 

请注意,此代码假定S不为空。

答案 3 :(得分:1)

返回输入字符串中最大出现的字符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
            }
        }

我们检查字典值的最大数量

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

这也将处理这种情况,如果在一个字符串中存在多个具有相同重复字符数且最大字符数的字符

答案 4 :(得分:1)

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);
  }
}

答案 5 :(得分:0)

对于简单字符串操作,此程序可以完成:

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]);
           } 
}

答案 6 :(得分:0)

简单但最好的实现如下。

 `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;
}`

答案 7 :(得分:0)

    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;
    }

答案 8 :(得分:0)

一个简单的程序,用于使用集合查找字符串中的最大重复字符。

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)));

    }

}

答案 9 :(得分:0)

您可以尝试以下代码:

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));
    }
}

答案 10 :(得分:0)

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;

}

答案 11 :(得分:0)

 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);


            }
    }

答案 12 :(得分:0)

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;     
}

答案 13 :(得分:0)

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);
        }

    }

}

答案 14 :(得分:0)

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);
}

答案 15 :(得分:0)

请尝试这个代码,我为我做了.........

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;
    }

答案 16 :(得分:0)

试试这个,

        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);

答案 17 :(得分:-1)

  public class RepeatingCharacter {
   static final int ASCII_SIZE = 256;
     static int getMaxRepeatingChar(String str){
     int count[] = new int[ASCII_SIZE];

    int length = str.length();
    for(int i=0; i<length; i++){
        count[str.charAt(i)]++;
    }

    int max = -1;
    char result = ' ';

    for(int i=0; i<length; i++){
        if(max < count[str.charAt(i)]){
            max=count[str.charAt(i)];
            result = str.charAt(i);
        }

    }
    return result;

}

public static void main(String[] args) {
    String str = "TUOPPPPJHHTT";
    System.out.println("Max repeating character is: " + getMaxRepeatingChar(str));

    }   
}

答案 18 :(得分:-2)

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