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

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

/*
*“出南门,走六步,见着六叔和六舅,叫声六叔和六舅,借我六斗六升好绿豆;过了秋,打了豆,
* 还我六叔六舅六十六斗六升好绿 豆。”
* 有上面的字符串内容。使用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了。

 

posted @   LiGoper  阅读(1137)  评论(8编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示
+

"感谢您的支持,我会继续努力"

微信支付
支付宝支付