Implement multiplyStrings(a, b) to multiply two non-negative integers given as decimal strings and return the product as a string without converting the full inputs to built-in big-integer or fixed-width integer types. Your solution should correctly handle very large inputs (e.g., up to 10^5 total digits), manage carries and leading zeros, and avoid quadratic memory blowups. Explain the algorithmic options (grade-school O(nm), Karatsuba, FFT-based convolution), their trade-offs, and implement at least one approach with stated time/space complexity. Include tests for edge cases such as "0", "1", different lengths, and many trailing zeros.