Prepend and Append (Codeforces 1791C)
Tags: Implement, two pointers

Timur initially had a binary string$$$^{\dagger}$$$ $$$s$$$ (possibly of length $$$0$$$). He performed the following operation several (possibly zero) times:   Add $$$\texttt{0}$$$ to one end of the string and $$$\texttt{1}$$$ to the other end of the string. For example, starting from the string $$$\texttt{1011}$$$, you can obtain either $$$\color{red}{\texttt{0}}\texttt{1011}\color{red}{\texttt{1}}$$$ or $$$\color{red}{\texttt{1}}\texttt{1011}\color{red}{\texttt{0}}$$$.  You are given Timur's final string. What is the length of the shortest possible string he could have started with?$$$^{\dagger}$$$ A binary string is a string (possibly the empty string) whose characters are either $$$\texttt{0}$$$ or $$$\texttt{1}$$$.

Input: The first line of the input contains an integer $$$t$$$ ($$$1 \leq t \leq 100$$$) — the number of testcases.The first line of each test case contains an integer $$$n$$$ ($$$1 \leq n \leq 2000$$$) — the length of Timur's final string.The second line of each test case contains a string $$$s$$$ of length $$$n$$$ consisting of characters $$$\texttt{0}$$$ or $$$\texttt{1}$$$, denoting the final string.

Output: For each test case, output a single nonnegative integer — the shortest possible length of Timur's original string. Note that Timur's original string could have been empty, in which case you should output $$$0$$$.

Note: In the first test case, the shortest possible string Timur started with is $$$\texttt{0}$$$, and he performed the following operation: $$$\texttt{0} \to \color{red}{\texttt{1}}\texttt{0}\color{red}{\texttt{0}}$$$.In the second test case, the shortest possible string Timur started with is $$$\texttt{11}$$$, and he performed the following operation: $$$\texttt{11} \to \color{red}{\texttt{0}}\texttt{11}\color{red}{\texttt{1}}$$$.In the third test case, the shortest possible string Timur started with is $$$\texttt{10101}$$$, and he didn't perform any operations.In the fourth test case, the shortest possible string Timur started with is the empty string (which we denote by $$$\varepsilon$$$), and he performed the following operations: $$$\varepsilon \to \color{red}{\texttt{1}}\texttt{}\color{red}{\texttt{0}} \to \color{red}{\texttt{0}}\texttt{10}\color{red}{\texttt{1}} \to \color{red}{\texttt{1}}\texttt{0101}\color{red}{\texttt{0}}$$$.In the fifth test case, the shortest possible string Timur started with is $$$\texttt{101}$$$, and he performed the following operations: $$$\texttt{101} \to \color{red}{\texttt{0}}\texttt{101}\color{red}{\texttt{1}} \to \color{red}{\texttt{1}}\texttt{01011}\color{red}{\texttt{0}}$$$.

Sample Inputs:
9
3
100
4
0111
5
10101
6
101010
7
1010110
1
1
2
10
2
11
10
1011011010

Sample Outputs:
1
2
5
0
3
1
0
2
4

Solution (Python):
def solve(length, string):
    j = length - 1
    i = 0
    while length > 0 and string[i] != string[j]:
        length -= 2
        i += 1
        j -= 1
    return length

def main():
    t = int(input())
    for i in range(t):
        length = int(input())
        final_string = input()
        ans = solve(length, final_string)
        print(ans)
main()

Solution (Python):
t = int(int(input()))
for i in range(t):
    n = int(input())
    l = list(input())
    (a, b) = (0, n - 1)
    while a < b and l[a] != l[b]:
        a += 1
        b -= 1
    print(b - a + 1)

Solution (Python):
def solve():
    n = int(input())
    s = input()
    low = 0
    high = n - 1
    c = 0
    while low <= high:
        if s[low] == '0' and s[high] == '1' or (s[low] == '1' and s[high] == '0'):
            low += 1
            high -= 1
            c += 2
        else:
            break
    print(n - c)
T = int(input())
for _ in range(T):
    solve()