4

たとえば、"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++;
    }
}

しかし、このアプローチの問題は、すべてのアルファベットの繰り返し出現をカウントすることです。

4

19 に答える 19

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.
于 2013-10-25T01:29:49.830 に答える
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 が空でないことを前提としていることに注意してください。

于 2014-05-27T03:30:57.693 に答える
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);
        }

    }

}
于 2016-01-23T21:18:15.350 に答える
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);
}
于 2015-07-02T16:31:37.183 に答える
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;     
}
于 2016-05-15T20:16:42.077 に答える
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);
于 2013-10-25T01:31:48.777 に答える
-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
于 2015-12-17T08:52:13.260 に答える