Skip to content

Commit ce0ce9f

Browse files
author
Bogdan Hladiuc
committed
Q387 First Unique Character in a String
1 parent 24e21fc commit ce0ce9f

File tree

8 files changed

+163
-2
lines changed

8 files changed

+163
-2
lines changed

LeetcodeNew.sln

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Q211_Design_Add_Search_Word
7373
EndProject
7474
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Q189_Rotate_Array", "Q189_Rotate_Array\Q189_Rotate_Array.csproj", "{321FC947-2B8B-45E0-B89E-3AB9F2A95F44}"
7575
EndProject
76+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Q387_First_Unique_Character_In_a_String", "Q387_First_Unique_Character_In_a_String\Q387_First_Unique_Character_In_a_String.csproj", "{9082807A-83D9-4756-9A20-307EBF21D6E1}"
77+
EndProject
7678
Global
7779
GlobalSection(SolutionConfigurationPlatforms) = preSolution
7880
Debug|Any CPU = Debug|Any CPU
@@ -506,5 +508,17 @@ Global
506508
{321FC947-2B8B-45E0-B89E-3AB9F2A95F44}.Release|x64.Build.0 = Release|Any CPU
507509
{321FC947-2B8B-45E0-B89E-3AB9F2A95F44}.Release|x86.ActiveCfg = Release|Any CPU
508510
{321FC947-2B8B-45E0-B89E-3AB9F2A95F44}.Release|x86.Build.0 = Release|Any CPU
511+
{9082807A-83D9-4756-9A20-307EBF21D6E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
512+
{9082807A-83D9-4756-9A20-307EBF21D6E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
513+
{9082807A-83D9-4756-9A20-307EBF21D6E1}.Debug|x64.ActiveCfg = Debug|Any CPU
514+
{9082807A-83D9-4756-9A20-307EBF21D6E1}.Debug|x64.Build.0 = Debug|Any CPU
515+
{9082807A-83D9-4756-9A20-307EBF21D6E1}.Debug|x86.ActiveCfg = Debug|Any CPU
516+
{9082807A-83D9-4756-9A20-307EBF21D6E1}.Debug|x86.Build.0 = Debug|Any CPU
517+
{9082807A-83D9-4756-9A20-307EBF21D6E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
518+
{9082807A-83D9-4756-9A20-307EBF21D6E1}.Release|Any CPU.Build.0 = Release|Any CPU
519+
{9082807A-83D9-4756-9A20-307EBF21D6E1}.Release|x64.ActiveCfg = Release|Any CPU
520+
{9082807A-83D9-4756-9A20-307EBF21D6E1}.Release|x64.Build.0 = Release|Any CPU
521+
{9082807A-83D9-4756-9A20-307EBF21D6E1}.Release|x86.ActiveCfg = Release|Any CPU
522+
{9082807A-83D9-4756-9A20-307EBF21D6E1}.Release|x86.Build.0 = Release|Any CPU
509523
EndGlobalSection
510524
EndGlobal
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#nullable disable warnings
2+
using System.Diagnostics;
3+
4+
namespace Q387_First_Unique_Character_In_a_String {
5+
6+
public class Q387_First_Unique_Character_In_a_String {
7+
public static void Run() {
8+
var tests = new List<Test> {
9+
new Test {
10+
Str = "leetcode",
11+
Expected = 0,
12+
Id = 1
13+
},
14+
new Test {
15+
Str = "loveleetcode",
16+
Expected = 2,
17+
Id = 2
18+
},
19+
new Test {
20+
Str = "aabb",
21+
Expected = -1,
22+
Id = 3
23+
}
24+
};
25+
26+
foreach (var test in tests) {
27+
int pos = Solution(test.Str);
28+
test.Verify(pos);
29+
}
30+
}
31+
32+
private static int Solution(string str) {
33+
var freq = new int[256];
34+
var map = new Dictionary<int, int>();
35+
36+
for (int i = 0; i < str.Length; i++) {
37+
freq[str[i] - 'a']++;
38+
map[str[i] - 'a'] = i;
39+
}
40+
41+
var result = int.MaxValue;
42+
43+
for (int i = 0; i < freq.Length; i++) {
44+
if (freq[i] == 1) {
45+
result = Math.Min(result, map[i]);
46+
}
47+
}
48+
49+
return result == int.MaxValue ? -1 : result;
50+
}
51+
}
52+
53+
internal class Test {
54+
public string Str { get; set; }
55+
public int Expected { get; set; }
56+
public int Id { get; set; }
57+
58+
public void Verify(int idx) {
59+
Debug.Assert(idx == Expected, $"Test {Id} failed. {idx} != {Expected}");
60+
}
61+
}
62+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net6.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
</PropertyGroup>
8+
9+
</Project>

Run/Program.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ static void Main(string[] args) {
99
// Q71_Simplify_Path.Q71_Simplify_Path.Run();
1010
// Q152_Maximum_Product_Subarray.Q152_Maximum_Product_Subarray.Run();
1111
// Q173_Binary_Search_Tree_Iterator.Q173_Binary_Search_Tree_Iterator.Run();
12-
Q189_Rotate_Array.Q189_Rotate_Array.Run();
12+
// Q189_Rotate_Array.Q189_Rotate_Array.Run();
1313
// Q199_Binary_Tree_Right_Side_View.Q199_Binary_Tree_Right_Side_View.Run();
1414
// Q211_Design_Add_Search_Words_Data_Structure.Q211_Design_Add_Search_Words_Data_Structure.Run();
1515
// Q215_Kth_Largest_Element.Q215_Kth_Largest_Element.Run();
@@ -22,6 +22,7 @@ static void Main(string[] args) {
2222
// Q297_Serialize_Deserialize_Binary_Tree.Q297_Serialize_Deserialize_Binary_Tree.Run();
2323
// Q316_Remove_Duplicate_Letters.Q316_Remove_Duplocate_Letters.Run();
2424
// Q383_Ransom_Note.Ransom_Note.Run();
25+
Q387_First_Unique_Character_In_a_String.Q387_First_Unique_Character_In_a_String.Run();
2526
// Q523_Continuous_Subarray_Sum.Q523_Continuous_Subarray_Sum.Run();
2627
// Q528_Random_Pick_with_Weight.Q528_Random_Pick_with_Weight.Run();
2728
// Q621_Task_Scheduler.Q621_Task_Scheduler.Run();

Run/Run.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
<ProjectReference Include="..\Q253_Meeting_Room_II\Q253_Meeting_Room_II.csproj" />
3737
<ProjectReference Include="..\Q211_Design_Add_Search_Words_Data_Structure\Q211_Design_Add_Search_Words_Data_Structure.csproj" />
3838
<ProjectReference Include="..\Q189_Rotate_Array\Q189_Rotate_Array.csproj" />
39+
<ProjectReference Include="..\Q387_First_Unique_Character_In_a_String\Q387_First_Unique_Character_In_a_String.csproj" />
3940
</ItemGroup>
4041

4142
<PropertyGroup>

Run/obj/Run.csproj.nuget.dgspec.json

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1308,6 +1308,58 @@
13081308
}
13091309
}
13101310
},
1311+
"/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q387_First_Unique_Character_In_a_String/Q387_First_Unique_Character_In_a_String.csproj": {
1312+
"version": "1.0.0",
1313+
"restore": {
1314+
"projectUniqueName": "/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q387_First_Unique_Character_In_a_String/Q387_First_Unique_Character_In_a_String.csproj",
1315+
"projectName": "Q387_First_Unique_Character_In_a_String",
1316+
"projectPath": "/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q387_First_Unique_Character_In_a_String/Q387_First_Unique_Character_In_a_String.csproj",
1317+
"packagesPath": "/Users/Bogdan/.nuget/packages/",
1318+
"outputPath": "/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q387_First_Unique_Character_In_a_String/obj/",
1319+
"projectStyle": "PackageReference",
1320+
"configFilePaths": [
1321+
"/Users/Bogdan/.nuget/NuGet/NuGet.Config"
1322+
],
1323+
"originalTargetFrameworks": [
1324+
"net6.0"
1325+
],
1326+
"sources": {
1327+
"https://api.nuget.org/v3/index.json": {}
1328+
},
1329+
"frameworks": {
1330+
"net6.0": {
1331+
"targetAlias": "net6.0",
1332+
"projectReferences": {}
1333+
}
1334+
},
1335+
"warningProperties": {
1336+
"warnAsError": [
1337+
"NU1605"
1338+
]
1339+
}
1340+
},
1341+
"frameworks": {
1342+
"net6.0": {
1343+
"targetAlias": "net6.0",
1344+
"imports": [
1345+
"net461",
1346+
"net462",
1347+
"net47",
1348+
"net471",
1349+
"net472",
1350+
"net48"
1351+
],
1352+
"assetTargetFallback": true,
1353+
"warn": true,
1354+
"frameworkReferences": {
1355+
"Microsoft.NETCore.App": {
1356+
"privateAssets": "all"
1357+
}
1358+
},
1359+
"runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/6.0.202/RuntimeIdentifierGraph.json"
1360+
}
1361+
}
1362+
},
13111363
"/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q523_Continuous_Subarray_Sum/Q523_Continuous_Subarray_Sum.csproj": {
13121364
"version": "1.0.0",
13131365
"restore": {
@@ -2006,6 +2058,9 @@
20062058
"/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q383_Ransom_Note/Q383_Ransom_Note.csproj": {
20072059
"projectPath": "/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q383_Ransom_Note/Q383_Ransom_Note.csproj"
20082060
},
2061+
"/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q387_First_Unique_Character_In_a_String/Q387_First_Unique_Character_In_a_String.csproj": {
2062+
"projectPath": "/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q387_First_Unique_Character_In_a_String/Q387_First_Unique_Character_In_a_String.csproj"
2063+
},
20092064
"/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q523_Continuous_Subarray_Sum/Q523_Continuous_Subarray_Sum.csproj": {
20102065
"projectPath": "/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q523_Continuous_Subarray_Sum/Q523_Continuous_Subarray_Sum.csproj"
20112066
},

Run/obj/project.assets.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,16 @@
284284
"bin/placeholder/Q383_Ransom_Note.dll": {}
285285
}
286286
},
287+
"Q387_First_Unique_Character_In_a_String/1.0.0": {
288+
"type": "project",
289+
"framework": ".NETCoreApp,Version=v6.0",
290+
"compile": {
291+
"bin/placeholder/Q387_First_Unique_Character_In_a_String.dll": {}
292+
},
293+
"runtime": {
294+
"bin/placeholder/Q387_First_Unique_Character_In_a_String.dll": {}
295+
}
296+
},
287297
"Q523_Continuous_Subarray_Sum/1.0.0": {
288298
"type": "project",
289299
"framework": ".NETCoreApp,Version=v6.0",
@@ -541,6 +551,11 @@
541551
"path": "../Q383_Ransom_Note/Q383_Ransom_Note.csproj",
542552
"msbuildProject": "../Q383_Ransom_Note/Q383_Ransom_Note.csproj"
543553
},
554+
"Q387_First_Unique_Character_In_a_String/1.0.0": {
555+
"type": "project",
556+
"path": "../Q387_First_Unique_Character_In_a_String/Q387_First_Unique_Character_In_a_String.csproj",
557+
"msbuildProject": "../Q387_First_Unique_Character_In_a_String/Q387_First_Unique_Character_In_a_String.csproj"
558+
},
544559
"Q523_Continuous_Subarray_Sum/1.0.0": {
545560
"type": "project",
546561
"path": "../Q523_Continuous_Subarray_Sum/Q523_Continuous_Subarray_Sum.csproj",
@@ -623,6 +638,7 @@
623638
"Q29_Divide_Two_Integers >= 1.0.0",
624639
"Q316_Remove_Duplicate_Letters >= 1.0.0",
625640
"Q383_Ransom_Note >= 1.0.0",
641+
"Q387_First_Unique_Character_In_a_String >= 1.0.0",
626642
"Q523_Continuous_Subarray_Sum >= 1.0.0",
627643
"Q528_Random_Pick_with_Weight >= 1.0.0",
628644
"Q56_Merge_Intervals >= 1.0.0",
@@ -733,6 +749,9 @@
733749
"/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q383_Ransom_Note/Q383_Ransom_Note.csproj": {
734750
"projectPath": "/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q383_Ransom_Note/Q383_Ransom_Note.csproj"
735751
},
752+
"/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q387_First_Unique_Character_In_a_String/Q387_First_Unique_Character_In_a_String.csproj": {
753+
"projectPath": "/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q387_First_Unique_Character_In_a_String/Q387_First_Unique_Character_In_a_String.csproj"
754+
},
736755
"/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q523_Continuous_Subarray_Sum/Q523_Continuous_Subarray_Sum.csproj": {
737756
"projectPath": "/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Q523_Continuous_Subarray_Sum/Q523_Continuous_Subarray_Sum.csproj"
738757
},

Run/obj/project.nuget.cache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"version": 2,
3-
"dgSpecHash": "7y4ZZg5ahKQ0flSNDEk77NHVvJHNkeq9V4oxzois0izVJC6h2QbAoD8pWsyaqez/P2IoqBtIMi1I7xaVUW2I3g==",
3+
"dgSpecHash": "kAR52NfcaOxBNgBTk7lVzcz7yMJ8tjQhvcBOEy7R3+DR7iAnJSBBIRFnyOSt7BMJRz5u+77RpMy8vvXZE7V2LQ==",
44
"success": true,
55
"projectFilePath": "/Users/Bogdan/Documents/Work/CtCI/VS_Code/LeetcodeNew/Run/Run.csproj",
66
"expectedPackageFiles": [],

0 commit comments

Comments
 (0)