CSES - Yksi merkki

Tehtäväsi on laskea, monessako merkkijonon osajonossa jokainen merkki on sama. Esimerkiksi merkkijonossa abbbcaa tällaiset osajonot ovat

  • a (kolmesti)
  • aa
  • b (kolmesti)
  • bb (kahdesti)
  • bbb
  • c

eli yhteensä 11 osajonoa.

Voit olettaa, että merkkijono muodostuu merkeistä az ja siinä on enintään 10^5 merkkiä. Tavoitteena on, että algoritmin aikavaativuus on O(n).

Python

Toteuta tiedostoon onechar.py funktio count, joka palauttaa halutun tuloksen.

def count(s):
    # TODO

if __name__ == "__main__":
    print(count("aaa")) # 6
    print(count("abbbcaa")) # 11
    print(count("abcde")) # 5

Java

Toteuta tiedostoon OneChar.java metodi count, joka palauttaa halutun tuloksen.

public class OneChar {
    public long count(String s) {
        // TODO
    }

    public static void main(String[] args) {
        OneChar o = new OneChar();
        System.out.println(o.count("aaa")); // 6
        System.out.println(o.count("abbbcaa")); // 11
        System.out.println(o.count("abcde")); // 5
    }
}