3474. Lexicographically Smallest Generated String

This commit is contained in:
2026-04-01 11:28:34 +03:00
parent 3b9bbfe3db
commit 3d490d6027
4 changed files with 121 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>_3474._Lexicographically_Smallest_Generated_String</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@@ -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")}\"");

View File

@@ -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<char> chars, string s2, Span<bool> 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;
}
}

View File

@@ -203,6 +203,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2946. Matrix Similarity Aft
EndProject 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}" 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 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 Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU 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|x64.Build.0 = Release|Any CPU
{5020405E-5F4F-4AC6-932D-00F01643A2F0}.Release|x86.ActiveCfg = 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 {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 EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE