我有一个像这样的字符串 BGGBG 。现在我必须将所有 BG 翻转到 GB 。在此字符串中有两个 BG 。现在,如果我想将其表示为Binary (采用B = 0和G = 1),那么它将是 01101 。因此,我们希望将 01 翻转为 10 。这可能吗?如果是,该如何在 Python 中完成?
仅供参考:不不是翻转位(0到1,反之亦然),而是与翻转图案(在这种情况下,例如 01 )。
我知道我可以像这样使用str.replace():
string=string.replace("BG","GB") # will replace all BG to GB
实际上,这是在代码部队解决此问题的一种不错的方法。 https://codeforces.com/problemset/problem/266/B
答案 0 :(得分:2)
我并不是说这是最好,最可持续甚至是可以接受的方式,但是写这个当然很有趣。我希望它使您更接近解决您要解决的问题:
import re
# I’m assuming that the string is "((BG)*(GB)*)*"
# any other characters will make this fail
input = 'BGBGBGGBGBGB'
output = ''
for two in re.findall('..', input):
output += int.to_bytes(int.from_bytes(two.encode(), 'big') ^ 1285, 2, 'big').decode('ascii')
print(input)
print(output)
答案 1 :(得分:2)
如果您的二进制字符串位于bg
中,则仅在mask
具有bg
的位置将01
设置为1。 flip
中的1会加倍,然后与原始XORd进行运算以得到结果:
>>> bg = 0b00011011
>>> mask = bg & (~bg>>1)
>>> flip = mask|mask<<1
>>> result = bg ^ flip
>>> bin(result)
'0b00101101'