Java hackerrank中的重复字符串问题获取时间限制问题

Java hackerrank中的重复字符串问题获取时间限制问题,java,Java,我正在解决重复字符串hackerrank问题。但是所有的测试用例都没有运行,可能是我的逻辑不正确,问题就是这样 下面给出了我的代码,它由repeatedString和countingA函数组成,这些函数没有任何变量 i、 a,和无穷大的字符串 import java.io.*; import java.math.*; import java.security.*; import java.text.*; import java.util.*; import java.util.concurre

我正在解决重复字符串hackerrank问题。但是所有的测试用例都没有运行,可能是我的逻辑不正确,问题就是这样

下面给出了我的代码,它由repeatedString和countingA函数组成,这些函数没有任何变量 i、 a,和无穷大的字符串

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;

public class Solution {

    // Complete the repeatedString function below.
    static long repeatedString(String s, long n) {
        long i=1;
        String infinityString="";
        while(s.length()*i<=n)
        {
            infinityString+=s;
            i++;
        }
        if(s.length()%infinityString.length()==0){
           return countingA(infinityString); 
        }else{
            infinityString+=s.substring(0,(s.length()%infinityString.length())-1);
            return countingA(infinityString); 
        }
    }
    public static long countingA(String infinity)
    {   
        long a=0;
        for(int i=0;i<infinity.length();i++)
        {
            if(infinity.charAt(i)=='a')
            {
                a++;
            }
        }
        return a;
    }

    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) throws IOException {
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        String s = scanner.nextLine();

        long n = scanner.nextLong();
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

        long result = repeatedString(s, n);

        bufferedWriter.write(String.valueOf(result));
        bufferedWriter.newLine();

        bufferedWriter.close();

        scanner.close();
    }
}
import java.io.*;
导入java.math.*;
导入java.security.*;
导入java.text.*;
导入java.util.*;
导入java.util.concurrent.*;
导入java.util.regex.*;
公共类解决方案{
//完成下面的repeatedString函数。
静态长重复字符串(字符串s,长n){
长i=1;
字符串无限字符串=”;

当(S长度)(i)p>也许你丢失的情况是“<代码> n%s!= 0 ”,然后需要计算额外的A。我还用C++解决了这个问题,并使用了下面的逻辑

  static int numberOfAs(String s,long len){
        int val=0;
        for(int i=0;i<len;i++){
            if(s.charAt(i)=='a'){
                val++;
            }
        }
        return val;
    }

    static long repeatedString(String s, long n) {

        int size = s.length();
        int noA = numberOfAs(s,s.length());// 1
        double val = Math.floor(n/size);
        if(s.length()%n==0){ // 2
            return noA*(long)val;
        }else{
            long countedA = (long)val * noA; //3
            long valsLeft = n-(long) (val*size); //4
            long letfA = numberOfAs(s,valsLeft); //5
            long ans = countedA + letfA; //6
            return ans;
        }
    }
静态整数(字符串s,长len){
int-val=0;
对于(int i=0;i可能尝试

static long countA(String s, long n) {
    long totalCount = 0;
    long aCount = 0;
    long times = n / s.length();

    for(int i = 0; i < s.length(); i++) {    
        if(s.charAt(i) == 'a')    
            aCount++;    
    }
    totalCount =  times * aCount;
    aCount = 0;
    if(n%s.length() != 0) {
        for(int i=0;i<n - (times * s.length());i++)
            aCount++;
    }
    return totalCount + aCount;
}
static long countA(字符串s,长n){
长总计数=0;
长A数=0;
长时间=n/s.长度();
对于(inti=0;i对于(int i=0;i而言,由于字符串串联分配了更大的字符串,因此即使在普通代码中,以下代码也太慢

    String infinityString = "";
    while (s.length()*i <= n) {
        infinityString += s;
        i++;
    }

    StringBuilder infinityStringB = new StringBuilder();
    while (s.length()*i <= n) {
        infinityStringB.append(s);
        i++;
    }
    String infinityString = StringBuilder.toString();
我们可以看到:字符串不能容纳长n字符

但是,您不需要重复的字符串:

if (s.isEmpty()) {
    return 0;
}
long repititions = n / s.length();
int remaining = (int)(n % s.length());
String remainder = s.substring(0, remaining);

return countAs(s) * repetitions + countAs(remainder);

你能换成java吗?
if (s.isEmpty()) {
    return 0;
}
long repititions = n / s.length();
int remaining = (int)(n % s.length());
String remainder = s.substring(0, remaining);

return countAs(s) * repetitions + countAs(remainder);