码迷,mamicode.com
首页 > 其他好文 > 详细

关于字符串中取相同的字符问题(小学题)

时间:2015-04-12 14:47:37      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:

有个新入门的学弟,在群里发了这样一个题目:

/*
*“出南门,走六步,见着六叔和六舅,叫声六叔和六舅,借我六斗六升好绿豆;过了秋,打了豆,
* 还我六叔六舅六十六斗六升好绿 豆。”
* 有上面的字符串内容。使用StringBuilder拼接获取里面所有的“舅”字和出现的次数。
* 例如:如果“和”字出现了6次,就输出:和和和和和和6
*/

看题目,很简单,很简单。

应该是学校的老师给学生出的入门级题目。

考察的循环和string于stringbuilder之间的区别等等。

题目解法很简单,常规解法就是循环一下,逐个匹配即可。

突然想,咱能不能不用循环呢?于是想了这个奇葩方法:

 1     static class Program
 2     {
 3         public static T LuckGo<T>(this T t, Action<T> action)
 4         {
 5             action(t);
 6             return t;
 7         }
 8 
 9         static void Main(string[] args)
10         {
11             /*
12                 *“出南门,走六步,见着六叔和六舅,叫声六叔和六舅,借我六斗六升好绿豆;过了秋,打了豆,
13                 * 还我六叔六舅六十六斗六升好绿   豆。”
14                 * 有上面的字符串内容。使用StringBuilder拼接获取里面所有的“舅”字和出现的次数。
15                 * 例如:如果“和”字出现了6次,就输出:和和和和和和6    
16              */
17 
18 
19             new Lack() { Str = "", Charts = "“出南门,走六步,见着六叔和六舅,叫声六叔和六舅,借我六斗六升好绿豆;过了秋,打了豆,还我六叔六舅六十六斗六升好绿豆。”" }
20                 .LuckGo(f => f.Begin())
21                 .LuckGo(f => f.Str = "")
22                 .LuckGo(f => f.Begin());
23 
24             Console.ReadLine();
25         }
26 
27     }
28 
29     public class Lack
30     {
31         /// <summary>
32         /// 目标字符
33         /// </summary>
34         public string Str { set; private get; }
35         /// <summary>
36         /// 源字符串
37         /// </summary>
38         public string Charts { set; private get; }
39 
40         /// <summary>
41         /// 拆解方法
42         /// </summary>
43         public void Begin()
44         {
45             var strs = Charts.Replace(Str, "|").Split(|);
46             var stringBuilder = new StringBuilder();
47             for (var i = 0; i < strs.Length - 1; i++)
48             {
49                 stringBuilder.Append(Str);
50             }
51             stringBuilder.Append(strs.Length - 1);
52             Console.WriteLine(stringBuilder.ToString());
53         }
54 
55     }

运行结果:

技术分享

思路:

咱不用常规的for来循环,我们先用replace来替换目标字符,换成特殊的字节,然后用split来分组(这个split方法内部的实现过程我不清楚是如何完成的,可能也有循环的。)

然后直接组装目标字符。完成输出的数据。

结论:

理论上,这是应该可以提升效率的,但也不一定,因为replace和split方法内也是有循环的,个人认为,这样写,只是换了一种实现方式,效率应该不是很高。

请大牛讲解replace和split了。

 

关于字符串中取相同的字符问题(小学题)

标签:

原文地址:http://www.cnblogs.com/likeli/p/4419461.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!