using System; // To execute C#, please define "static void Main" on a class // named Solution. // "abc", "xyz" -> false // "abc", "xyza" -> true // "a", "a" -> true // "aabbcc", "defa" -> true // "aaa1millioncharacters.." , "xyz" // "xyz", "aaa1millioncharacters.." class Solution { bool HasCommon(string a, string b) { HashSet set = new HashSet(); foreach (char c in a) { set.TryAdd(c); } foreach (char c in b) { if (set.HasKey(c)) { return true; } } return false; } } // 6 -> "six" // 42 -> "forty two" // 8379 -> "eight thousand three hundred seventy nine". // 32 million //0 -> "zero", 1-> "one", 2-> "two", .., 9-> "nine" //11->"eleven", 12-> "...", 19 -> "nineteen" // 10->"ten", ..., "90" -> "ninty" // 100 -> "hundred" // 1000 -> "thousand" // (21 / 10) * 10 = 20 // 21 % 10 = 1 // (101 / 100) * 100 = 100 (hundred) // 101 % 100 = 1 -> // -25.138.379 string ConvertNumber(int number) { Dictionary numberDict = new Dictionary() { { 0, "zero" }, ... { 100, " hundred " }, { 1000, " thousand " }, { 1000000, " million" }, }; string strNumber = "negative "; if (numberDict.ContainsKey(number)) { strNumber = numberDict[number]; } else { if (number > 1000000) { var (s ,n) = Part(number, 1000000, " million "); strNumber += s; number = n; } // 25 million // 138.379 if (number > 1000) { var (s ,n) = Part(number, 1000, " thousand "); strNumber += s; number = n; } // twenty five million one hundred thirty eight thousand // 379 if (number > 100) { var (s ,n) = Part(number, 100, " hundred "); strNumber += s; number = n; } // twenty five million one hundred thirty eight thousand three hundred // 79 int a = (number / 10) * 10; // 20 strNumber += numberDict[a]; int b = number % 10; // 1 strNumber += numberDict[b]; } return strNumber; } (string, int) Part(int number, int divider, string unit) { int part = number / divider; // 8379 string strNumber = ConvertNumber(part) + unit; int remainingNumber = number - part * divider; return (strNumber, remainingNumber); }