Complex Number Multiplication

medium math string simulation

Problem

Given two complex numbers as strings 'a+bi', return their product in the same format.

Inputnum1 = "1+1i", num2 = "1+1i"
Output"0+2i"
(1+i)(1+i) = 1·1 + 1·i + i·1 + i² = 0 + 2i.

def complex_number_multiply(a, b):
    def parse(s):
        s = s[:-1]  # drop 'i'
        i = s.index("+", 1) if s[0] == "-" else s.index("+")
        return int(s[:i]), int(s[i+1:])
    ar, ai = parse(a); br, bi = parse(b)
    return f"{ar*br - ai*bi}+{ar*bi + ai*br}i"
function complexNumberMultiply(a, b) {
  function parse(s) {
    s = s.slice(0, -1);
    const i = s.indexOf("+", 1);
    return [Number(s.slice(0, i)), Number(s.slice(i + 1))];
  }
  const [ar, ai] = parse(a), [br, bi] = parse(b);
  return `${ar * br - ai * bi}+${ar * bi + ai * br}i`;
}
class Solution {
    public String complexNumberMultiply(String a, String b) {
        int[] x = parse(a), y = parse(b);
        return (x[0]*y[0] - x[1]*y[1]) + "+" + (x[0]*y[1] + x[1]*y[0]) + "i";
    }
    int[] parse(String s) {
        s = s.substring(0, s.length() - 1);
        int i = s.indexOf('+', 1);
        return new int[]{ Integer.parseInt(s.substring(0, i)), Integer.parseInt(s.substring(i + 1)) };
    }
}
pair parse(string s) {
    s.pop_back();
    int p = s.find('+', 1);
    return { stoi(s.substr(0, p)), stoi(s.substr(p + 1)) };
}
string complexNumberMultiply(string a, string b) {
    auto [ar, ai] = parse(a);
    auto [br, bi] = parse(b);
    return to_string(ar*br - ai*bi) + "+" + to_string(ar*bi + ai*br) + "i";
}
Time: O(|s|) Space: O(1)