Comparison String (Codeforces 1837B)
Tags: Greedy, greedy

You are given a string $$$s$$$ of length $$$n$$$, where each character is either < or >.An array $$$a$$$ consisting of $$$n+1$$$ elements is compatible with the string $$$s$$$ if, for every $$$i$$$ from $$$1$$$ to $$$n$$$, the character $$$s_i$$$ represents the result of comparing $$$a_i$$$ and $$$a_{i+1}$$$, i. e.:  $$$s_i$$$ is < if and only if $$$a_i < a_{i+1}$$$;  $$$s_i$$$ is > if and only if $$$a_i > a_{i+1}$$$. For example, the array $$$[1, 2, 5, 4, 2]$$$ is compatible with the string <<>>. There are other arrays with are compatible with that string, for example, $$$[13, 37, 42, 37, 13]$$$.The cost of the array is the number of different elements in it. For example, the cost of $$$[1, 2, 5, 4, 2]$$$ is $$$4$$$; the cost of $$$[13, 37, 42, 37, 13]$$$ is $$$3$$$.You have to calculate the minimum cost among all arrays which are compatible with the given string $$$s$$$.

Input: The first line contains one integer $$$t$$$ ($$$1 \le t \le 500$$$) — the number of test cases.Each test case consists of two lines:   the first line contains one integer $$$n$$$ ($$$1 \le n \le 100$$$);  the second line contains the string $$$s$$$, consisting of $$$n$$$ characters. Each character of $$$s$$$ is either < or >. 

Output: For each test case, print one integer — the minimum cost among all arrays which are compatible with the given string $$$s$$$.

Note: In the first test case of the example, the array can be $$$[13, 37, 42, 37, 13]$$$.In the second test case of the example, the array can be $$$[42, 37, 13, 37, 42]$$$.

Sample Inputs:
4
4
<<>>
4
>><<
5
>>>>>
7
<><><><

Sample Outputs:
3
3
6
2

Solution (Python):
def repeats(string):
    maxcount = 0
    curcount = 1
    for i in range(1, len(string)):
        if string[i] == string[i - 1]:
            curcount += 1
        else:
            if curcount > maxcount:
                maxcount = curcount
            curcount = 1
    if curcount > maxcount:
        maxcount = curcount
    return maxcount
res = []
b = int(input())
for i in range(b):
    c = int(input())
    a = input()
    count = repeats(a)
    res.append(count + 1)
print(*res, sep='\n')

Solution (Python):
import sys

def inp():
    return sys.stdin.readline().strip()

def outp(output):
    return sys.stdout.write(str(output))
for i in range(int(inp())):
    leng = int(inp())
    s = inp()
    mx_cons = 0
    prev = s[0]
    cons = 0
    for i in range(leng):
        if s[i] == prev:
            cons += 1
        else:
            mx_cons = max(cons, mx_cons)
            cons = 1
            prev = s[i]
    mx_cons = max(cons, mx_cons)
    print(mx_cons + 1)

Solution (Python):
a = int(input())
for i in range(a):
    b = int(input())
    c = input()
    d = 0
    sumbmax = 0
    sumb = ''
    for j in range(b):
        if sumb == '':
            sumb = c[j]
            d += 1
        elif c[j] == sumb:
            d += 1
        if d > sumbmax:
            sumbmax = d
        if c[j] != sumb:
            sumb = c[j]
            d = 1
    print(sumbmax + 1)