In C, how do you prove that if no character appears more than floor(n/2) times, we can always achieve n%2 length of the final string? (where 'n' is the length of the given string) Please help.
In C, how do you prove that if no character appears more than floor(n/2) times, we can always achieve n%2 length of the final string? (where 'n' is the length of the given string) Please help.
Let
First, notice that we can do some operation exactly when $$$\mathrm{maxf}_1 \lt n$$$.
Case 1: $$$n\equiv0\pmod{2}$$$
Claim: If $$$\mathrm{maxf}_1 \le n/2$$$ and $$$n \gt 0$$$, we can do an operation such that after the operation, $$$\mathrm{maxf}_1 \le n/2$$$.
Proof:
This means that if we have $$$\mathrm{maxf}_1 \le n/2$$$ and $$$\mathrm{maxf}_1 \lt n$$$, we can do an operation and keep the first condition satisfied. Thus, we can do operations while $$$n/2 \lt n\ \Leftrightarrow\ 0 \lt n/2\ \Leftrightarrow\ n \gt 0$$$. Thus we can always reach the state with $$$n = 0$$$. $$$\square$$$
Case 2: $$$n\equiv1\pmod{2}$$$
Claim: If $$$\mathrm{maxf}_1 \le \lceil n/2\rceil$$$ and $$$n \gt 1$$$, we can do an operation such that after the operation, $$$\mathrm{maxf}_1 \le \lceil n/2\rceil$$$.
Proof:
This means that if we have $$$\mathrm{maxf}_1 \le \lceil n/2\rceil$$$ and $$$\mathrm{maxf}_1 \lt n$$$, we can do an operation and keep the first condition satisfied. Thus, we can do operations while $$$\lceil n/2\rceil \lt n\ \Leftrightarrow\ (n+1)/2 \lt n\ \Leftrightarrow\ n+1 \lt 2n\ \Leftrightarrow\ 1 \lt 2n-n\ \Leftrightarrow\ n \gt 1$$$. Thus we can always reach the state with $$$n = 1$$$. $$$\square$$$