Annettuna on bittijono, jossa jokainen merkki on tai . Tehtäväsi on laskea summa kaikista bittiparien etäisyyksistä, joissa kumpikin bitti on .
Esimerkiksi kun bittijono on , etäisyydet ovat seuraavat:
- (etäisyys )
- (etäisyys )
- (etäisyys )
Etäisyyksien summa on siis .
Voit olettaa, että bittijonon pituus on enintään . Tavoitteena on, että algoritmin aikavaativuus on .
Python
Toteuta tiedostoon bitpairs.py
funktio calculate
, joka ilmoittaa etäisyyksien summan.
def calculate(s): # TODO if __name__ == "__main__": print(calculate("10110")) # 6 print(calculate("10")) # 0 print(calculate("10010110")) # 20 print(calculate("0011110111101010")) # 214
Java
Toteuta tiedostoon BitPairs.java
metodi calculate
, joka ilmoittaa etäisyyksien summan.
public class BitPairs { public long calculate(String s) { // TODO } public static void main(String[] args) { BitPairs b = new BitPairs(); System.out.println(b.calculate("10110")); // 6 System.out.println(b.calculate("10")); // 0 System.out.println(b.calculate("10010110")); // 20 System.out.println(b.calculate("0011110111101010")); // 214 } }