Suggest a context-free grammar that creates this language:
$L=\{tct^Rcscw | t,s,w\in (a+b)^*, \space\space s \ne w^R\}$
My Solution Approach:
We split the language to $S_1$ and $S_2$, where $S_1$ creates the $tct^R$ part and $S_2$ creates the $scw$ part, with a $c$ between them.
$S\to S_1cS_2$
$S_1\to aS_1a|bS_1b|c$. (This creates $tct^R)$.
$S_2 \to aS_2a|bS_2b|aXb|bXa$. (The idea is to jump to $X$ when we ruin the palindrome aka $s\ne w^R)$.
$X\to aXa|bXb|aXb|bXa|c$. (basically can do anything as long as we finish with $c$ between).
Although I'm confident in the solution, I feel like I missed something, I would really appreciate any feedback about my solution, and how do you check yourself after you've attempted questions of these type?
Looks like a very good method to me, with one bug. Your grammar assumes that $s$ and $w$ in your broken palindrome have to be the same length. But they can be different, e.g. $abba\,c\,b$ is another broken palindrome.
The way I checked this was by recursively checking the pieces of the grammar:
You separate the grammar into two parts, which you'll combine through union.
The union is a simple rule $S\to S_1 S_2$.
When merging two grammars, you have to be absolutely certain that symbols don't clobber each other. But $S_1$ and all of its rules use different symbols than $S_2$ and all of its rules. So there's no clobbering problem. The two grammars have been glued together properly.
Now we can consider the grammars separately. $S_1$ looks like a straightforward grammar for producing palindromes.
$S_2$ looks like a straightforward grammar for producing two broken palindromes. Indeed, it searches for a place where the two strings have nonmatching symbols. But if we check the definition of the language, it says simply that $s\neq w^R$, which can happen in many ways.
The assumption that you break a palindrome by mutating at least one of its symbols is not fully general. You can also break a palindrome by having two strings of different lengths.
So the fix is to focus on creating a grammar for $\{ x\mathtt{c}y \mid x,y\in \{a,b\}^*,\; x\neq y^R\}$ in full generality.
Taking inspiration from your earlier approach of subdividing the problem, you might try creating a grammar just to recognize two strings of different lengths (separated by $\mathtt{c}$). If you combine that with your existing grammar for recognizing two same-length strings that form a defective palindrome, you'll have the complete grammar.
Incidentally, I'm impressed by your intuition that you missed something. This was exactly the sort of thing I would completely overlook if I weren't checking very carefully.