From 4279ee4204e7a069135565a3e31a521bd7c335d4 Mon Sep 17 00:00:00 2001 From: rinost081 <66202148+rinost081@users.noreply.github.com> Date: Wed, 21 May 2025 21:35:38 +0900 Subject: [PATCH 1/2] update --- lc387.md | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 lc387.md diff --git a/lc387.md b/lc387.md new file mode 100644 index 0000000..2b40f86 --- /dev/null +++ b/lc387.md @@ -0,0 +1,68 @@ +# step1 +思考ログ +- 2つのpointerを使って走査すれば最悪計算時間はO(n^2)かかるが単純だと思った. + +```python +class Solution: + def firstUniqChar(self, s: str) -> int: + seen = set() + for i in range(len(s)): + if s[i] in seen: + continue + j = i + 1 + is_repeat = False + while(j < len(s)): + if s[j] == s[i]: + is_repeat = True + j += 1 + + if is_repeat is False: + return i + seen.add(s[i]) + + return -1 +``` + +# step2 +参考にした他の方のPR +- https://github.com/potrue/leetcode/pull/15/files?short_path=5e4287a#diff-5e4287a02e3f11dbbbe1217cb91b9370bcf7798cdde8ce6e7c1729817e53c0fc +- 前回同様,私のstep1での実装をライブラリ(Counterとfind)で簡潔に解いている実装だった.明らかにこちらの方が読みやすい. +```python +class Solution: + def firstUniqChar(self, s: str) -> int: + str_to_count = Counter(s) + for character in s: + if str_to_count[character] == 1: + return s.find(character) + + return -1 +``` +- enumerateで場所を特定する方法 +```python +class Solution: + def firstUniqChar(self, s: str) -> int: + str_to_count = Counter(s) + for i, character in enumerate(s): + if str_to_count[character] == 1: + return i + + return -1 +``` +- https://github.com/nktr-cp/leetcode/pull/16/files?short_path=0c860cd#diff-0c860cd754249868513e4f9054206317fa33d0f548fc3896ac2b3e11822fd852 +- c++での実装、ただ眺めていた + +- https://github.com/mura0086/arai60/pull/19/files#diff-5ec7c3c87171edf4d61e9eb79fd926cafa27caf068da7474222897c8e9e7ab96 +- [lru_cache](https://docs.python.org/ja/3.13/library/functools.html#functools.lru_cache)(Least Recently Used cache)という概念を初めて知った. LeetCodeでもあるようだったので解いて見た. + +# step3 +``` +class Solution: + def firstUniqChar(self, s: str) -> int: + char_to_count = Counter(s) + + for i, character in enumerate(s): + if char_to_count[character] == 1: + return i + + return -1 +``` From 53d353f05ae4b011ec91309f9919418de8904e8b Mon Sep 17 00:00:00 2001 From: rinost081 <66202148+rinost081@users.noreply.github.com> Date: Wed, 21 May 2025 21:38:52 +0900 Subject: [PATCH 2/2] update --- ...roblems to solve for coding interview.xlsx | Bin 13622 -> 13815 bytes lc387.md | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/60 LeetCode problems to solve for coding interview.xlsx b/60 LeetCode problems to solve for coding interview.xlsx index 1fa83ad033b850586394729f5e90bc5cb9a28ad1..be5eaa8da6a847aa6b88d2185212835f26ee724a 100644 GIT binary patch delta 7118 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

i`B*9;P|DD?*_(-GLaPs)`)p>Ms zl59nl&-f_>d@ye@3*+BgQJ@?>U7?jj1DtVPO9)Z;b&63#YsF}BWrVO0W;~SR>E?vD zPWT&(PJxSeu%D)2K1aNBvc2 za8Z-TS!lqnD?pqM`~$F=w+U&H2+oOFyY#ZPSc8F>EqQ>IH4|w$zIuM!{f52^9_o(C zi%(|~mr%dCn<+}aB7#QW#ukI>7m3=PGp8DHAKFh!RFI)l-ge&$3?an*-k!I4u~0fk zlS=ss@sCj6@-G|%MX%x3R%hYz;~Q>??wAoK$1&hV%2v}VNtL)|EDcGK>i*r-ke%yX zIiZrCM;U(IS=IirS&6+{rnq_@LpIl+i71YD z$Bg0+FR*D!?TIFFj?J%Gk;;9k_V=v|qLVv0HVzS{6;^)PbZ}z2fGg#-(NrJq*)?l+ z#!E2CcIAwOx9C#R5^s5W-F=Rm!4KIsD*IFfbUZK~Uv2h@SMUX#-^Z%{M+6yG4zsf0+pA)yG zxs#==ow>aWm!GqfRmzESFOVGc{Bm7(2%NqfINU}TrvH^pqpgK>*^6KP`ZRt^@cIwd zwLM(q4EFit$&$MKPIy09xlyB{vDCt$L^d~}(J#oqbLA5ox2h*a6T^Edtehhdq@)n793}{aUZq_+PTuPYF`!DYQK@Exl zEeC!Y#z+Cze{9|a9tTF6tO;I_&$)*Cx%+wTdF?LnX^kfC$w1iX-rygQ-~SJ;Cw~n7 zg+i}Fcv1KCB6s|g-M!sC%WSnqd)Q|bl?%MB00h1t$2Y#6UGwE2dV4Ct_&!<`oK4sRfi#pu^O|@ z$I-2+M$<0DYM#U0oe-7`Y@ktYo_aW;3f%8laD(VR}~bbv_=!W{YzFz_t?H7N+{ihw?Eo{rgt5NJzy0=Kb}YS(Bgmq)`~zlco6usQ+(E{F^GlkqqUhr~aqBe|zTc?|t=e a^skr8nLNQSfkF&S#uK1NpXU8f@V@};VyHa; delta 7016 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