Contando las ocurrencias de una letra en una cadena infinita

Tengo la siguiente cadena llamada s="abcac"que se repite infinitamente muchas veces. Esto significa que sse verá así: s="abcacabcacabcacabcacabcac...."y nrepresenta la subcadena de s.

Por ejemplo, si s="monday"y n="10", la subcadena que consideramos será finalString="mondaymond", ya que la cadena infinita será "mondaymondaymondaymonday..."y los primeros 10 caracteres de sson"mondaymond"

Estoy tratando de contar las ocurrencias de la letra "a" en finalString. Este código funciona correctamente, sin embargo, cuando n> 1000000 el programa no funcionará.

Además, si cambio nde inta long, el bucle for no funcionará en este caso.

¿Cuál sería la solución a este problema?

public static void main(String[] args){

            String s="abcac";
            int aCount=0;
            int n=1000;
            int j=0;


            char[] sCharArray=s.toCharArray();

            char[] finalString = new char[n];

            for(int i=0;i<n;i++){

                if(j==s.length())
                    j=0;

                finalString[i]=sCharArray[j];
                j++;


            }


            for(int i=0; i<n;i++){
                if(finalString[i]=='a')
                    aCount++;
            }


    System.out.println(aCount);

            }
Respuesta 1

No necesita construir su cadena final. Solo tiene que contar las ocurrencias de 'a' (o lo que quiera) en la scadena y contar cuántas veces se srepite. Y después de todo, cuente las ocurrencias de 'a' en el recordatorio.

long countInS = // count all occurances of 'a'
long repeats = n / s.length;
long reminder = n % s.length;
String sReminder = s.substring(reminder);
long countInReminder = // count all occurances of 'a' in sReminder 
long count = repeats * countInS + countInReminder;

no es necesario desperdiciar tu RAM

Respuesta: 2

Tengo este código: switch (mes) {caso 1: System.out.print ("enero"); descanso; caso 2: System.out.print ("febrero"); descanso; caso 3: System.out.print ("marzo"); ...

en este ejemplo que muestra cómo hacerlo: Estudiante [] stud1 = nuevo Estudiante [2]; Estudiante [] stud2 = nuevo Estudiante [2]; Estudiante [] stud3 = nuevo Estudiante [2]; booleano b; stud1 [0] = nuevo estudiante ("Johnny", "Bravo"); stud1 [...

Aquí está mi código: class Question extiende Thread {información de cadena estática; Pregunta pública (información de cadena) {this.info = info; } vacío privado inProtected () {...

Estoy leyendo datos de la base de datos vertica usando múltiples hilos en java. Tengo alrededor de 20 millones de registros y estoy abriendo 5 subprocesos diferentes que tienen consultas seleccionadas como esta ... start = threadnum; ...