March 18, 2016

Problem statement:

https://www.hackerrank.com/challenges/two-strings/submissions/code/18506948

Julia likes to try a new way to train herself to expand C#/ C++ / Java / JavaScript languages, by reading the solutions, followed up with some study about small topics, make learning more fun.

Coding - write code, read code, memorize some classical code, practice it 20 days.

Julia's C# implementation:

1. https://gist.github.com/jianminchen/f73e37b764147cd19c7b

Julia reads 10 C# solution, C++, Java, JavaScript solutions, she likes to have this extensive reading on software code, and then, build up her daily routine as a software programmer. Coding is most important skills,
C#    - Read first, then write
C++  - Read more C++ code, prepare to write any time
Java  - Read more
JavaScript - Julia tries to read more JavaScript code, focus on reading for next 2 months

She also likes the following C# solution by other submissions:

https://www.hackerrank.com/challenges/two-strings/leaderboard/filter/language=csharp

Before you read the solution, can you think about using C# Hashset, Dictionary, String.Contains, Hashset.Overlap method, string.indexOf, Hashtable, string.Intersect etc. solve the problem?

Hashset, 
Dictionary, 
String.Contains, 
Hashset.Overlap method, 
string.indexOf, 
Hashtable, 
string.Intersect
Using two pointer to solve the problem

2. use hashset - more efficient
https://gist.github.com/jianminchen/acedbb7cb86cf1c00131

read hashset constructor:  <- Excellent, Julia is learning to write new C# code
https://msdn.microsoft.com/en-us/library/bb301504(v=vs.110).aspx

ToList
https://msdn.microsoft.com/en-us/library/bb342261(v=vs.100).aspx

https://msdn.microsoft.com/library/bb534972(v=vs.100).aspx

3. using string.intersect method
https://gist.github.com/jianminchen/cece566bd69963533e80

4. using C#, var, foreach, Any method - interesting to read
https://gist.github.com/jianminchen/50fc6b5a13b7d62dfa1d

5. IEnumerable - interesting to read the code
https://gist.github.com/jianminchen/cdba6a97769db30c2e76

Read IEnumberable:  C++ analog - duck typing
http://stackoverflow.com/questions/8764643/is-there-a-standard-c-equivalent-of-ienumerablet-in-c

IEnumberable - Java analog
http://stackoverflow.com/questions/362367/java-arrays-generics-java-equivalent-to-c-sharp-ienumerablet

6.  Two hashsets
https://gist.github.com/jianminchen/aa87f82f0247c4b59ab6

7. Hashset - overlaps method - code is readable
https://gist.github.com/jianminchen/b28fab138ad778bc4326

read Hashset overlap api - learn some design:
https://msdn.microsoft.com/en-us/library/bb355623(v=vs.110).aspx

8. Array, Array.BinarySearch method - it is not time efficient solution - but code is reusable.
https://gist.github.com/jianminchen/775cf5e16d065e66feae

9. Declare new struct data, use byte type, and code is beautiful, succinct.

https://gist.github.com/jianminchen/9d80b3995adf0b01f9d7

10. use two pointers, move forward if need separately - can be reused.

https://gist.github.com/jianminchen/7de04dcfb8740ee19412

11. Two things Julia likes:
'z'-'a' in array declaration,
second one is to use one array int[26], not 2; second one is char array

https://gist.github.com/jianminchen/de154d443a1434094260

bool[] founded = new bool['z' - 'a' + 1];
char[] secondWord = Console.ReadLine().ToCharArray();

12. Use Hashtable
https://gist.github.com/jianminchen/213335b4dec3988facfe

13. Use string.Contains() method
https://gist.github.com/jianminchen/6388585c990a42ea76ae

14. Use Dictionary class
https://gist.github.com/jianminchen/95b701e6d2146da13c1d

Dictionary<int, char>
Dictionary<int,char> dex = new Dictionary<int,char>();
Dictionary method ContainsValue()

15. string.ToCharArray(), Distinct() of Char Array, ToList(), ToArray(), string.IndexOf methods
https://gist.github.com/jianminchen/7562c5dd310508d48f58

16. use string.Containstwo dimension array
https://gist.github.com/jianminchen/365eb2b69e93573c0b5d

17. use Dictionary<char, bool>
https://gist.github.com/jianminchen/a91504a793f795886e23

18. use StringBuilder to concatenate output

https://gist.github.com/jianminchen/1fcc46803321f007eb1b

Read the discussion StringBuilder vs string to concatenation
http://stackoverflow.com/questions/1612797/string-concatenation-vs-string-builder-performance

https://support.microsoft.com/en-us/kb/306822

More reading: 1

19. use " " to concatenate two input strings and then .Split them
https://gist.github.com/jianminchen/591738de12e21e591634

More Julia likes:
IEnumerable - 
https://www.hackerrank.com/rest/contests/master/challenges/two-strings/hackers/cdkmoose/download_solution




Statistics:

More than 3 hours to work on this study, thinking in C# - 

Advice for C# programmers:

Julia enjoyed the study. Very focus, try to understand the solution, how other people think in C#. It is the big world, millions programmers in the world today, you have to go out to reach them, some wisdom out there, teach you to learn C# programming language in very organic way. 

No one person can put together so many ideas for a simple problem. 

Julia is proud of herself, come to some simple idea to train herself in algorithm thinking. Low cost, and easy to access, and good quality code. 

More reading:
18. use StringBuilder to concatenate output

Here are good ideas for Julia to be a better C# developer as the anonymous code writer in 18:
(From webpage: https://support.microsoft.com/en-us/kb/306822)
1. the benefits of using the StringBuilder class over traditional concatenation techniques
2. C/C++ strcat() - to allocate a large character array as a buffer and copy string data into the buffer.
3. In .NET framework, a string is immutable; it cannot be modified in place. <- immutable explanation!
4. The C# + concatenation operator builds a new string and causes reduced performance when it concatenates large amounts of text. 
5. .NET framework, a StringBuilder class is optimized for string concatenation. 
same as using a character array in C/C++, as well as automatically growing the buffer size (if needed) and tracking the length for you. 
6. Reuse existing StringBuilder class rather tahn reallocate each time you need one. This limits the growth of the heap and reduces garbage collection. StringBuilder makes more efficient use of the heap than using the + operator. 

Hacker Rank: Two Strings - thinking in C# 15+ ways的更多相关文章

  1. Hacker Rank: Kingdom Division 不完全报告

    原题链接: Kingdom Division 由于树的层次可能很深,所以这里不能使用递归版的DFS.我使用了BFS. BFS确定各结点的父结点和它的孩子数. 用逆拓扑排序确定结点的计算顺序. same ...

  2. Go语言strings包

    目录 strings包实现了用于操作字符的简单函数. func EqualFold 判断两个utf-8编码字符串(将unicode大写.小写.标题三种格式字符视为相同)是否相同. func Equal ...

  3. Consuming JSON Strings in SQL Server

    https://www.simple-talk.com/sql/t-sql-programming/consuming-json-strings-in-sql-server/ Consuming JS ...

  4. Machine Learning for Developers

    Machine Learning for Developers Most developers these days have heard of machine learning, but when ...

  5. JavaScript函数式编程究竟是什么?

    摘要: 理解函数式编程. 作者:前端小智 原文:JS中函数式编程基本原理简介 Fundebug经授权转载,版权归原作者所有. 在长时间学习和使用面向对象编程之后,咱们退一步来考虑系统复杂性. 在做了一 ...

  6. 数据结构与算法分析 – Disjoint Set(并查集)

    什么是并查集?并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题. 并查集的主要操作1.合并两个不相交集合2.判断两个元素是否属于同一集合 主要操作的解释 ...

  7. SPOJ220 Relevant Phrases of Annihilation(后缀数组)

    引用罗穗骞论文中的话: 先将n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组.然后二分答案,再将后缀分组.判断的时候,要看是否有一组后缀在每个原来的字符串中至少出现两次,并 ...

  8. Effective Java 51 Beware the performance of string concatenation

    Using the string concatenation operator repeatedly to concatenate n strings requires time quadratic ...

  9. POJ 1795

    DNA Laboratory Time Limit: 5000MS   Memory Limit: 30000K Total Submissions: 1425   Accepted: 280 Des ...

随机推荐

  1. Unity3d学习 相机的跟随

    最近在写关于相机跟随的逻辑,其实最早接触相机跟随是在Unity官网的一个叫Roll-a-ball tutorial上,其中简单的涉及了关于相机如何跟随物体的移动而移动,如下代码: using Unit ...

  2. 使用HTML5开发Kinect体感游戏

    一.简介 我们要做的是怎样一款游戏? 在前不久成都TGC2016展会上,我们开发了一款<火影忍者手游>的体感游戏,主要模拟手游章节<九尾袭来 >,用户化身四代,与九尾进行对决, ...

  3. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  4. HTTP常用状态码分析

    不管是面试还是工作中,经常会碰到需要通过HTTP状态码去判断问题的情况,比如对于后台RD,给到前端FE的一个接口,出现502或者504 error错误,FE就会说接口存在问题,如果没有知识储备,那就只 ...

  5. 计算机程序的思维逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...

  6. mac下安装及配置tomcat

    mac下的软件不像windows下的程序那样写注册表,对于tomcat的安装来说,在mac下是名符其实的绿色软件,具体操作如下: 1.到 apache官方主页 下载完整 tar.gz文件包.(没有专门 ...

  7. 我大中华微软MVP中国区人才库

    刘海峰:国内知名微软开源技术网站51Aspx 创始人,十年以上的Asp.net从业经验,微软MSDN特约讲师.Teched讲师.ImagineCup大赛评委.人大出版社研修班特约讲师,曾多次受邀访问美 ...

  8. Oracle第一步

    Oracle 启动数据库 Startup [NOMOUNT|MOUNT|OPEN|FORCE] [restrict] [pfile=filename] 启动实例,加载数据库,启动数据库 oRACLE关 ...

  9. 项目管理_FindBugs的使用

    本章将讲述如何在Myeclipse下,使用FindBugs,静态分析工具,无需开发人员费劲就能找出代码中已有的缺陷. 一:Myeclipse下如何安装FindBugs插件 1:FindBugs插件下载 ...

  10. Idea下用SBT搭建Spark Helloworld

    没用过IDEA工具,听说跟Eclipse差不多,sbt在Idea其实就等于maven在Eclipse.Spark运行在JVM中,所以要在Idea下运行spark,就先要安装JDK 1.8+ 然后加入S ...