From 77824baa7c7ba26c38444962f098d13054bf8c19 Mon Sep 17 00:00:00 2001 From: Vasily Guzov Date: Sun, 8 Dec 2024 23:53:36 +0300 Subject: [PATCH] [HAI] week3 backspace max solution https://leetcode.com/problems/backspace-string-compare/submissions/1473739645/ --- lib/backspaceCompare/backspaceCompare.test.ts | 26 +++++++++++++++ lib/backspaceCompare/backspaceCompare.ts | 31 +++++++++++++++++ lib/backspaceCompare/index.ts | 3 ++ lib/backspaceCompare/readme.md | 33 +++++++++++++++++++ 4 files changed, 93 insertions(+) create mode 100644 lib/backspaceCompare/backspaceCompare.test.ts create mode 100644 lib/backspaceCompare/backspaceCompare.ts create mode 100644 lib/backspaceCompare/index.ts create mode 100644 lib/backspaceCompare/readme.md diff --git a/lib/backspaceCompare/backspaceCompare.test.ts b/lib/backspaceCompare/backspaceCompare.test.ts new file mode 100644 index 0000000..930a395 --- /dev/null +++ b/lib/backspaceCompare/backspaceCompare.test.ts @@ -0,0 +1,26 @@ +import { describe, it, expect } from "vitest"; +import { backspaceCompare } from "./backspaceCompare.ts"; + +describe("backspaceCompare", () => { + + it("ab#c, ad#c => true", () => { + expect(backspaceCompare("ab#c", "ad#c")).toBeTruthy(); + }); + + it("ab##, c#d# => true", () => { + expect(backspaceCompare("ab##", "c#d#")).toBeTruthy(); + }); + + it("a#c, b => false", () => { + expect(backspaceCompare("a#c", "b")).toBeFalsy(); + }); + + it("bxj##tw, bxj###tw => false", () => { + expect(backspaceCompare("bxj##tw", "bxj###tw")).toBeFalsy(); + }); + + it("nzp#o#g, b#nzp#o#g => true", () => { + expect(backspaceCompare("nzp#o#g", "b#nzp#o#g")).toBeTruthy(); + }); +}); + diff --git a/lib/backspaceCompare/backspaceCompare.ts b/lib/backspaceCompare/backspaceCompare.ts new file mode 100644 index 0000000..659113c --- /dev/null +++ b/lib/backspaceCompare/backspaceCompare.ts @@ -0,0 +1,31 @@ +function findNotSkipedIndex(s: string, i: number) { + let skipCount = 0; + while (i >= 0 && (skipCount > 0 || s[i] === '#')) { + if (s[i] === '#') { + skipCount += 1; + i -= 1; + continue; + } + skipCount -= 1; + i -= 1; + } + return i; +}; + +export function backspaceCompare(s: string, t: string): boolean { + let sI = s.length; + let tI = t.length; + + while (sI > 0 && tI > 0) { + sI = findNotSkipedIndex(s, sI - 1); + tI = findNotSkipedIndex(t, tI - 1); + + + if (sI >= 0 && tI >= 0 && s[sI] !== t[tI]) { + return false; + } + + } + + return findNotSkipedIndex(s, sI - 1) === findNotSkipedIndex(t, tI - 1); +}; diff --git a/lib/backspaceCompare/index.ts b/lib/backspaceCompare/index.ts new file mode 100644 index 0000000..ffc0000 --- /dev/null +++ b/lib/backspaceCompare/index.ts @@ -0,0 +1,3 @@ +import { backspaceCompare } from "./backspaceCompare"; + +export default backspaceCompare; diff --git a/lib/backspaceCompare/readme.md b/lib/backspaceCompare/readme.md new file mode 100644 index 0000000..946cefc --- /dev/null +++ b/lib/backspaceCompare/readme.md @@ -0,0 +1,33 @@ +# backspaceCompare + +## описание задачи + +## тест кейсы + +## текстовое описание решения + +## ассимптотическая оценка + +| Description | Estimation | +| ----------- | ---------- | +| time: | O(n) | +| mem: | O(n) | + +## time + +| Description | Time | +| ------------------------------------------- | ----- | +| анализ и сбор информации | 00:00 | +| обдумываение решения и формулировка решения | 00:00 | +| имплементация | 00:00 | +| исправление ошибок | 00:00 | +| полное время затраченое на решение | 00:00 | + +## журнал ошибок + +## code + +### typescript + +ts +