Java hackerrank中的重复字符串问题获取时间限制问题
我正在解决重复字符串hackerrank问题。但是所有的测试用例都没有运行,可能是我的逻辑不正确,问题就是这样 下面给出了我的代码,它由repeatedString和countingA函数组成,这些函数没有任何变量 i、 a,和无穷大的字符串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
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);