CSES - Kaksi merkkiä Tehtäväsi on laskea, monessako merkkijonon osajonossa on tasan kahta eri merkkiä. Esimerkiksi merkkijonossa aabacba tällaiset osajonot ovat
  • aab
  • aaba
  • ab
  • aba
  • ac
  • ba (kahdesti)
  • cb
eli yhteensä $8$ 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 twochar.py funktio count, joka ilmoittaa osajonojen määrän.
def count(s):
    # TODO

if __name__ == "__main__":
    print(count("aaaa")) # 0
    print(count("abab")) # 6
    print(count("aabacba")) # 8
    print(count("abacaadbaacaa")) # 21
Java

Toteuta tiedostoon TwoChar.java metodi count, joka ilmoittaa osajonojen määrän.
public class TwoChar {
    public long count(String s) {
        // TODO
    }

    public static void main(String[] args) {
        TwoChar t = new TwoChar();
        System.out.println(t.count("aaaa")); // 0
        System.out.println(t.count("abab")); // 6
        System.out.println(t.count("aabacba")); // 8
        System.out.println(t.count("abacaadbaacaa")); // 21
    }
}