3 回答
TA贡献1942条经验 获得超3个赞
我建议找出基本字符串重复的次数,并使用此信息计算字母的出现次数,以及最后出现的额外子字符串的次数。例如:
String s = "monday";
int n = 10;
String chr = "a";
int baseNum = s.length() - s.replace(chr, "").length();
int baseCnt = (n / s.length()) * baseNum;
int index = n % s.length();
String left = s.substring(0, index);
int finalCnt = left.length() - left.replace(chr, "").length();
int totalCnt = baseCnt + finalCnt;
System.out.println("There were " + totalCnt + " letter " + chr + ".");
这里的基本思想是效率。我们实际上不需要创建和使用任意长度的字符串,因为我们知道它只是重复相同的子字符串。相反,我们可以只计算子字符串中的出现次数,并通过该子字符串重复的次数来预测总数。
TA贡献1863条经验 获得超2个赞
正如其他答案中已经指出的那样,您不需要构建最终字符串。
这是我的解决方案:
public static void main(String[] args){
String s = "abcacas";
long n = 1000000;
long count = getCount(s, n, 'a');
System.out.println(count);
}
private long getCount(String str, long n, char c) {
int length = str.length();
long repeats = n / length;
long reminder = n % length;
long count = 0;
for (int i = 0; i < length; i++) {
if (str.charAt(i) == c) {
count += repeats;
if (i < reminder) {
count++;
}
}
}
return count;
}
TA贡献1815条经验 获得超10个赞
您不需要构建最终字符串。您只需要计算s字符串中 'a'(或任何您想要的)的出现次数,并计算它s重复了多少次。毕竟,计算提醒中“a”的出现次数。
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;
无需浪费您的 RAM
添加回答
举报