Annettuna on bittijono, jossa jokainen merkki on 0 tai 1. Tehtäväsi on laskea summa kaikista bittiparien etäisyyksistä, joissa kumpikin bitti on 1.
Esimerkiksi kun bittijono on 10110, etäisyydet ovat seuraavat:
- \underline{1}0\underline{1}10 (etäisyys 2)
- \underline{1}01\underline{1}0 (etäisyys 3)
- 10\underline{1}\underline{1}0 (etäisyys 1)
Etäisyyksien summa on siis 2+3+1=6.
Voit olettaa, että bittijonon pituus on enintään 10^5. Tavoitteena on, että algoritmin aikavaativuus on O(n).
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 } }