2147. Number of Ways to Divide a Long Corridor (Hard) - TengnanYao/daily_leetcode GitHub Wiki

class Solution:
    def numberOfWays(self, corridor: str) -> int:
        count = corridor.count("S")
        if count == 0 or count % 2 == 1:
            return 0
        i, j = 0, len(corridor) - 1
        while corridor[i] != "S":
            i += 1
        while corridor[j] != "S":
            j -= 1
        result = p = flag = 1
        for c in corridor[i : j]:
            if c == "S":
                if flag:
                    result *= p
                    p = 1
                flag ^= 1
            else:
                if flag:
                    p += 1
        return result % (10 ** 9 + 7)