@vish4071.
"B" "A" , , "A" . "B" "C" .
"BAABBABAB" "A" - replace("AB" by "AA"),replace("BA" by "AA"), replace("AA" by "A")
: "BBBAABABBBCCBCBBCACB"
"BBBAABABBB" "CCBCBBC" "A" "CB"
"A" "C" "A" "C"
: "ACAC"
, "A" / "C" . char. "A" "C" "C" "A" , char . char.
: O (n)
: O (1)
Java.
  public static String solution(String S) {
        final char C = 'C';
        final char A = 'A';
        
        if(!S.contains("A") || !S.contains("C")) return S;
    String res = "";
    boolean hasLetterChanged = false;
    char prevChar = 'D';
    for(char c : S.toCharArray()){
        if (c == A){
            if (prevChar == C){hasLetterChanged = true;}
        }else if(c == C){
            if (prevChar == A){hasLetterChanged = true;}
        }
        if(hasLetterChanged){
            res = res + prevChar;
            hasLetterChanged = false;
        }
        if(c == A || c == C){
            prevChar = c;
        }
    }
    return res + prevChar;
}
Python 2.7 ( 3x).
def solution(S):
    if not(S.__contains__('C') and S.__contains__('A')): return S
    has_char_changed = False
    prev_char = 'B'
    A = 'A'
    C = 'C'
    res = ""
    for c in S:
        if c == A:
            if prev_char == C:
                has_char_changed = True
        elif c == C:
            if prev_char == A:
                has_char_changed = True
        if has_char_changed:
            res = res + prev_char
            has_char_changed = False
        if c == A or c == C:
            prev_char = c
    return res + prev_char
if __name__ == '__main__':
    assert solution("ABBCC") == "AC"
    assert solution("BCBCABB") == "CA"
    assert solution("BBBAABABBBCCBCBBCACB") == "ACAC"
    assert solution("BBBBBBB") == "BBBBBBB"