Hacker Rank: Two Strings - thinking in C# 15+ ways
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.Contains, two 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的更多相关文章
- Hacker Rank: Kingdom Division 不完全报告
原题链接: Kingdom Division 由于树的层次可能很深,所以这里不能使用递归版的DFS.我使用了BFS. BFS确定各结点的父结点和它的孩子数. 用逆拓扑排序确定结点的计算顺序. same ...
- Go语言strings包
目录 strings包实现了用于操作字符的简单函数. func EqualFold 判断两个utf-8编码字符串(将unicode大写.小写.标题三种格式字符视为相同)是否相同. func Equal ...
- Consuming JSON Strings in SQL Server
https://www.simple-talk.com/sql/t-sql-programming/consuming-json-strings-in-sql-server/ Consuming JS ...
- Machine Learning for Developers
Machine Learning for Developers Most developers these days have heard of machine learning, but when ...
- JavaScript函数式编程究竟是什么?
摘要: 理解函数式编程. 作者:前端小智 原文:JS中函数式编程基本原理简介 Fundebug经授权转载,版权归原作者所有. 在长时间学习和使用面向对象编程之后,咱们退一步来考虑系统复杂性. 在做了一 ...
- 数据结构与算法分析 – Disjoint Set(并查集)
什么是并查集?并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题. 并查集的主要操作1.合并两个不相交集合2.判断两个元素是否属于同一集合 主要操作的解释 ...
- SPOJ220 Relevant Phrases of Annihilation(后缀数组)
引用罗穗骞论文中的话: 先将n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组.然后二分答案,再将后缀分组.判断的时候,要看是否有一组后缀在每个原来的字符串中至少出现两次,并 ...
- Effective Java 51 Beware the performance of string concatenation
Using the string concatenation operator repeatedly to concatenate n strings requires time quadratic ...
- POJ 1795
DNA Laboratory Time Limit: 5000MS Memory Limit: 30000K Total Submissions: 1425 Accepted: 280 Des ...
随机推荐
- Fis3的前端工程化之路[三大特性篇之资源定位]
Fis3版本:v3.4.22 Fis3的三大特性 资源定位:获取任何开发中所使用资源的线上路径 内容嵌入:把一个文件的内容(文本)或者base64编码(图片)嵌入到另一个文件中 依赖声明:在一个文本文 ...
- C#给PDF文档添加文本和图片页眉
页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...
- HTML渲染过程详解
无意中看到寒冬关于前端的九个问题,细细想来我也只是对第一.二.九问有所了解,正好也趁着这个机会梳理一下自己的知识体系.由于本人对http协议以及dns对url的解析问题并不了解,所以这里之探讨url请 ...
- Web大前端时代之:HTML5+CSS3入门系列
准备来一波新技术,待续.... Old: 联系源码:https://github.com/dunitian/LoTHTML5 文档下载:https://github.com/dunitian/LoTD ...
- 页面中多个script块之间的关系
一:函数声明与函数定义表达式在函数调用间的区别 <script type="text/javascript"> doA(); var doA = function(a ...
- scrapy爬虫docker部署
spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...
- python+uwsgi导致redis无法长链接引起性能下降问题记录
今天在部署python代码到预生产环境时,web站老是出现redis链接未初始化,无法连接到服务的提示,比对了一下开发环境与测试环境代码,完全一致,然后就是查看各种日志,排查了半天也没有查明是什么原因 ...
- 调用微信退款接口或发红包接口时出现System.Security.Cryptography.CryptographicException: 出现了内部错误 解决办法
我总结了一下出现证书无法加载的原因有以下三个 1.证书密码不正确,微信证书密码就是商户号 解决办法:请检查证书密码是不是和商户号一致 2.IIS设置错误,未加载用户配置文件 解决办法:找到网站使用的应 ...
- Mysql基础代码(不断完善中)
Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...
- Android开发学习——动画
帧动画> 一张张图片不断的切换,形成动画效果* 在drawable目录下定义xml文件,子节点为animation-list,在这里定义要显示的图片和每张图片的显示时长 ...