From 3d490d6027a8a2e5884e26fb61be9d490d86d017 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D1=8B=D1=82=D0=BA=D0=BE=D0=B2=20=D0=A0=D0=BE=D0=BC?= =?UTF-8?q?=D0=B0=D0=BD?= Date: Wed, 1 Apr 2026 11:28:34 +0300 Subject: [PATCH] 3474. Lexicographically Smallest Generated String --- ...aphically Smallest Generated String.csproj | 11 +++ .../Program.cs | 9 ++ .../Solution.cs | 87 +++++++++++++++++++ Leetcode.sln | 14 +++ 4 files changed, 121 insertions(+) create mode 100644 3474. Lexicographically Smallest Generated String/3474. Lexicographically Smallest Generated String.csproj create mode 100644 3474. Lexicographically Smallest Generated String/Program.cs create mode 100644 3474. Lexicographically Smallest Generated String/Solution.cs diff --git a/3474. Lexicographically Smallest Generated String/3474. Lexicographically Smallest Generated String.csproj b/3474. Lexicographically Smallest Generated String/3474. Lexicographically Smallest Generated String.csproj new file mode 100644 index 0000000..2808f89 --- /dev/null +++ b/3474. Lexicographically Smallest Generated String/3474. Lexicographically Smallest Generated String.csproj @@ -0,0 +1,11 @@ + + + + Exe + net10.0 + _3474._Lexicographically_Smallest_Generated_String + enable + enable + + + diff --git a/3474. Lexicographically Smallest Generated String/Program.cs b/3474. Lexicographically Smallest Generated String/Program.cs new file mode 100644 index 0000000..9bb622b --- /dev/null +++ b/3474. Lexicographically Smallest Generated String/Program.cs @@ -0,0 +1,9 @@ +var sol = new Solution(); + +// System.Console.WriteLine($"TFTF | ab -> \"{sol.GenerateString("TFTF", "ab")}\""); +// System.Console.WriteLine($"TFTF | abc -> \"{sol.GenerateString("TFTF", "abc")}\""); +// System.Console.WriteLine($"F | d -> \"{sol.GenerateString("F", "d")}\""); +// System.Console.WriteLine($"F | da -> \"{sol.GenerateString("F", "da")}\""); +// System.Console.WriteLine($"FT | da -> \"{sol.GenerateString("FT", "aghbdfhf")}\""); +// System.Console.WriteLine($"TFFFTFFF | bab -> \"{sol.GenerateString("TFFFTFFF", "bab")}\""); +System.Console.WriteLine($"TFT | xx -> \"{sol.GenerateString("TFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFTFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFTFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFT", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")}\""); \ No newline at end of file diff --git a/3474. Lexicographically Smallest Generated String/Solution.cs b/3474. Lexicographically Smallest Generated String/Solution.cs new file mode 100644 index 0000000..207c6be --- /dev/null +++ b/3474. Lexicographically Smallest Generated String/Solution.cs @@ -0,0 +1,87 @@ +using System.Text; + +public class Solution +{ + public string GenerateString(string str1, string str2) + { + var len = str1.Length + str2.Length - 1; + var answer = new char[len]; + + // Сначала обработать все T + for (var i = 0; i < str1.Length; i++) + { + if (str1[i] == 'T') + { + var sbIdx = i; + for (var j = 0; j < str2.Length; j++) + { + if (answer[sbIdx] != 0 && answer[sbIdx] != str2[j]) + return ""; + answer[sbIdx++] = str2[j]; + } + } + } + // Теперь обработать все F + var canChange = new bool[len]; + var lastF = -1; + for (var i = 0; i < str1.Length; i++) + if (str1[i] == 'F') + { + if (ProcessF(answer.AsSpan()[i..(i + str2.Length)], str2, canChange.AsSpan()[i..(i + str2.Length)], out var goBack) == false) + return ""; + if(goBack && lastF != -1) + i = lastF - 1; + else + lastF = i; + } + + return new string(answer); + } + + private bool ProcessF(Span chars, string s2, Span canChange, out bool goBack) + { + goBack = false; + + var equal = true; + var emptyCount = 0; + var hasDiff = false; + var lastCanChange = -1; + for (var i = 0; i < s2.Length; i++) + { + equal &= chars[i] == s2[i]; + if (chars[i] == 0) + emptyCount++; + else if (chars[i] != s2[i]) + hasDiff = true; + if (canChange[i]) + lastCanChange = i; + } + if (equal) + { + if (lastCanChange >= 0) + { + chars[lastCanChange]++; + if (chars[lastCanChange] == 'z' + 1) + chars[lastCanChange] = 'a'; + goBack = true; + return true; + } + else + return false; + } + for (var i = 0; i < chars.Length && emptyCount > 0; i++) + { + if (chars[i] != 0) + continue; + var insert = 'a'; + if (emptyCount == 1 && s2[i] == insert && !hasDiff) + insert++; + chars[i] = insert; + canChange[i] = true; + if (s2[i] != insert) + hasDiff = true; + emptyCount--; + } + return true; + } +} \ No newline at end of file diff --git a/Leetcode.sln b/Leetcode.sln index 23425b8..e397c98 100644 --- a/Leetcode.sln +++ b/Leetcode.sln @@ -203,6 +203,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2946. Matrix Similarity Aft EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2840. Check if Strings Can be Made Equal With Operations II", "2840. Check if Strings Can be Made Equal With Operations II\2840. Check if Strings Can be Made Equal With Operations II.csproj", "{5020405E-5F4F-4AC6-932D-00F01643A2F0}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "3474. Lexicographically Smallest Generated String", "3474. Lexicographically Smallest Generated String\3474. Lexicographically Smallest Generated String.csproj", "{7493B586-527C-4D54-A048-2E9B96B52A6E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1413,6 +1415,18 @@ Global {5020405E-5F4F-4AC6-932D-00F01643A2F0}.Release|x64.Build.0 = Release|Any CPU {5020405E-5F4F-4AC6-932D-00F01643A2F0}.Release|x86.ActiveCfg = Release|Any CPU {5020405E-5F4F-4AC6-932D-00F01643A2F0}.Release|x86.Build.0 = Release|Any CPU + {7493B586-527C-4D54-A048-2E9B96B52A6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7493B586-527C-4D54-A048-2E9B96B52A6E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7493B586-527C-4D54-A048-2E9B96B52A6E}.Debug|x64.ActiveCfg = Debug|Any CPU + {7493B586-527C-4D54-A048-2E9B96B52A6E}.Debug|x64.Build.0 = Debug|Any CPU + {7493B586-527C-4D54-A048-2E9B96B52A6E}.Debug|x86.ActiveCfg = Debug|Any CPU + {7493B586-527C-4D54-A048-2E9B96B52A6E}.Debug|x86.Build.0 = Debug|Any CPU + {7493B586-527C-4D54-A048-2E9B96B52A6E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7493B586-527C-4D54-A048-2E9B96B52A6E}.Release|Any CPU.Build.0 = Release|Any CPU + {7493B586-527C-4D54-A048-2E9B96B52A6E}.Release|x64.ActiveCfg = Release|Any CPU + {7493B586-527C-4D54-A048-2E9B96B52A6E}.Release|x64.Build.0 = Release|Any CPU + {7493B586-527C-4D54-A048-2E9B96B52A6E}.Release|x86.ActiveCfg = Release|Any CPU + {7493B586-527C-4D54-A048-2E9B96B52A6E}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE