3474. Lexicographically Smallest Generated String
This commit is contained in:
@@ -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>
|
||||
@@ -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")}\"");
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
14
Leetcode.sln
14
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
|
||||
|
||||
Reference in New Issue
Block a user