在重复的字符串中查找出现任何字符的总时间

时间:2018-12-02 06:55:12

标签: java arrays

给出一个整数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);

3 个答案:

答案 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;
}