LeetCode Solutions

722. Remove Comments

Time:

Space:

			

class Solution {
 public:
  vector<string> removeComments(vector<string>& source) {
    vector<string> ans;
    bool commenting = false;
    string modified;

    for (const string& line : source) {
      for (int i = 0; i < line.length();) {
        if (i + 1 == line.length()) {
          if (!commenting)
            modified += line[i];
          ++i;
          break;
        }
        const string& twoChars = line.substr(i, 2);
        if (twoChars == "/*" && !commenting) {
          commenting = true;
          i += 2;
        } else if (twoChars == "*/" && commenting) {
          commenting = false;
          i += 2;
        } else if (twoChars == "//") {
          if (!commenting)
            break;
          else
            i += 2;
        } else {
          if (!commenting)
            modified += line[i];
          ++i;
        }
      }
      if (modified.length() > 0 && !commenting) {
        ans.push_back(modified);
        modified = "";
      }
    }

    return ans;
  }
};
			

class Solution {
  public List<String> removeComments(String[] source) {
    List<String> ans = new ArrayList<>();
    boolean commenting = false;
    StringBuilder modified = new StringBuilder();

    for (final String line : source) {
      for (int i = 0; i < line.length();) {
        if (i + 1 == line.length()) {
          if (!commenting)
            modified.append(line.charAt(i));
          ++i;
          break;
        }
        String twoChars = line.substring(i, i + 2);
        if (twoChars.equals("/*") && !commenting) {
          commenting = true;
          i += 2;
        } else if (twoChars.equals("*/") && commenting) {
          commenting = false;
          i += 2;
        } else if (twoChars.equals("//")) {
          if (!commenting)
            break;
          else
            i += 2;
        } else {
          if (!commenting)
            modified.append(line.charAt(i));
          ++i;
        }
      }
      if (modified.length() > 0 && !commenting) {
        ans.add(modified.toString());
        modified.setLength(0);
      }
    }

    return ans;
  }
}
			

class Solution:
  def removeComments(self, source: List[str]) -> List[str]:
    ans = []
    commenting = False
    modified = ''

    for line in source:
      i = 0
      while i < len(line):
        if i + 1 == len(line):
          if not commenting:
            modified += line[i]
          i += 1
          break
        twoChars = line[i:i + 2]
        if twoChars == '/*' and not commenting:
          commenting = True
          i += 2
        elif twoChars == '*/' and commenting:
          commenting = False
          i += 2
        elif twoChars == '//':
          if not commenting:
            break
          else:
            i += 2
        else:
          if not commenting:
            modified += line[i]
          i += 1
      if modified and not commenting:
        ans.append(modified)
        modified = ''

    return ans