Build a version of the Unix tr -s command. Given a list of lines and a string chars, collapse consecutive runs of any character that appears in chars to a single occurrence. Other characters are unchanged. Return the lines joined by newline characters (\n).
Notes: chars is a non-empty ASCII string whose characters are taken literally (no ranges). Only runs of the same character from chars are collapsed; all other characters, and runs of characters not in chars, stay as they are. Upper and lower case are different characters. Lines may be empty.
Function signature:
def trSqueeze(self, lines: List[str], chars: str) -> str:
Example:
Input: lines = ["aaabbb", "abaa"], chars = "a" Output: "abbb\naba" When printed: abbb aba
Build a
set of squeeze characters. Walk each line tracking the previous emitted character. Skip the current char only if it's in the squeeze set AND it equals prev.
prev = ''
for ch in line:
if ch in squeeze and ch == prev:
continue
out.append(ch)
prev = ch
The full solution:
class Solution:
def trSqueeze(self, lines, chars):
squeeze = set(chars)
result = []
for line in lines:
out = []
prev = ''
for ch in line:
if ch in squeeze and ch == prev:
continue
out.append(ch)
prev = ch
result.append(''.join(out))
return "\n".join(result)
Free plan: 30 tutor messages. Premium is unlimited.
