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编码(图片)嵌入到另一个文件中 依赖声明:在一个文本文 ...
- javascript动画系列第三篇——碰撞检测
前面的话 前面分别介绍了拖拽模拟和磁性吸附,当可视区域内存在多个可拖拽元素,就出现碰撞检测的问题,这也是javascript动画的一个经典问题.本篇将详细介绍碰撞检测 原理介绍 碰撞检测的方法有很多, ...
- 开源:Taurus.MVC 框架
为什么要创造Taurus.MVC: 记得被上一家公司忽悠去负责公司电商平台的时候,情况是这样的: 项目原版是外包给第三方的,使用:WebForm+NHibernate,代码不堪入目,Bug无限,经常点 ...
- 我是如何在SQLServer中处理每天四亿三千万记录的
首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...
- Apache 与 php的环境搭建
Apache和PHP的版本分别为: httpd-2.4.9-win64-VC11.zip php-5.6.9-Win32-VC11-x64.zip 下载地址: php-5.6.9-Win32-VC11 ...
- Centos6.5下编译安装mysql 5.6
一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server rpm -qa | grep mysql 有的话通过下面的命令来卸载掉 rpm -e mysql //普通删除模式 rpm -e ...
- js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的
题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...
- Linux碎碎念
在学习Linux过程中,有许多有用的小技巧.如果放在纸质的笔记本上,平时查阅会相当不方便.现在以一种“碎碎念”的方式,汇集整理在此,目前还不是很多,但随着学习.工作的深入,后续会陆陆续续添加更多的小技 ...
- Python自然语言处理工具小结
Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...
- 解决IE8下不兼容rgba()的解决办法
rgba()是css3的新属性,所以IE8及以下浏览器不兼容,这怎么办呢?终于我找到了解决办法. 解决办法 我们先来解释以下rgba rgba: rgba的含义,r代表red,g代表green,b代表 ...