给出一个整数n,找到并打印无限字符串的前n个字母中字母a的数量。
例如,如果字符串s ='abcac'且n = 10,则我们考虑的子字符串为abcacabcac,即其无限字符串的前10个字符。子字符串中有4次出现。
static long repeatedString(String s, long n) {
long len = s.length(), count = 0;
StringBuilder sb = new StringBuilder("");
char[] c = s.toCharArray();
for (int i = 0; i < n; i++) {
sb.append(c[(i % len)]);
if (sb.charAt(i) == 'a')
count++;
}
return count;
}
显示错误
不兼容的类型:可能从long到int的有损转换 sb.append(c [i%len]);
如果我使用类型转换len,那么它不会通过长度大于10 ^ 9的值的测试用例,例如,如果我的输入是
a
1000000000000
则输出必须为1000000000000
note->对于任何给定的输入,我必须计算“ a”的总数 存在于给定的字符串中
编辑:我正在以
调用我的函数长结果= repeaterString(“ a”,1000000000000);
答案 0 :(得分:1)
您的问题的一部分似乎有点含糊,但是从最后一行,我明白了,您想要查找字符串中特定字符的出现次数。
您可以使用HashMap
添加String的唯一字符,并将该值设置为该字符的出现次数。
我的意思在代码中看起来像这样:
HashMap<Character,Integer> hm = new HashMap<Character,Integer>();
char[] str = s.toCharArray();
for(char c : str) {
if(hm.containsKey(c))
hm.put(c, hm.get(c)+1);
else
hm.put(c, 1);
}
现在,您只需在字符串中选择所需的字符即可获得它的出现次数,如下所示:
if(hm.get(character)!=null)
ans = hm.get(character);
else
ans = 0;
还有一个图书馆,我正在for this here.
编辑:
从编辑中,问题更加清楚了,因为您要做的就是将字符串的字符添加到前一个字符串中,直到满足长度为止。
在那之后,您可以像在代码中一样使用新字符串,我在这里给出了。
答案 1 :(得分:0)
我认为您不必使用StringBuidler
(此外,对于大n
,这可能会流OutOfMemoryError
),但是可以随时计算所需的字母。
public static long repeatedString(String str, long n, char ch) {
long count = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ch)
continue;
count += n / str.length();
count += i < n % str.length() ? 1 : 0;
}
return count;
}
答案 2 :(得分:0)
您不需要StringBuilder。
通过迭代初始字符串并将其乘以所需次数(即乘以(n / len)
)来获得所需的结果,然后添加除法项剩下的内容:
static long repeatedString(String s, long n) {
long len = s.length();
if (len == 0)
return 0;
long rep = n / len;
long count = 0;
for (int i = 0; i < len; i++) {
if (s.charAt(i) == 'a')
count++;
}
count *= rep;
long rest = n % len;
for (int i = 0; i < rest; i++) {
if (s.charAt(i) == 'a')
count++;
}
return count;
}