关于字符串中取相同的字符问题(小学题)
有个新入门的学弟,在群里发了这样一个题目:
/*
*“出南门,走六步,见着六叔和六舅,叫声六叔和六舅,借我六斗六升好绿豆;过了秋,打了豆,
* 还我六叔六舅六十六斗六升好绿 豆。”
* 有上面的字符串内容。使用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了。
作者:Li keli
出处:https://www.cnblogs.com/likeli/p/4419461.html
本站使用「署名 4.0 国际」创作共享协议,转载请在文章明显位置注明作者及出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?