關於字串中取相同的字元問題(小學題)
有個新入門的學弟,在群裡發了這樣一個題目:
/*
*“出南門,走六步,見著六叔和六舅,叫聲六叔和六舅,借我六斗六升好綠豆;過了秋,打了豆,
* 還我六叔六舅六十六斗六升好綠 豆。”
* 有上面的字串內容。使用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了。
相關文章
- 關於DrawerLayout的小問題
- [20181229]關於字串的分配問題.txt字串
- 面試有關字串中字元出現重複字元的面試問題,這裡都有了面試字串字元
- 關於CSS中的float可能出現的小問題CSS
- 關於陣列的物件獲取及排序問題/小程式的多層頁面返回問題陣列物件排序
- 關於PCA降維中遇到的python問題小結PCAPython
- 關於 RocketMQ ClientID 相同引發的訊息堆積的問題MQclient
- [20190102]關於字串的分配問題(10g).txt字串
- 關於 AppCrawler 執行過程中的幾個小問題APP
- 關於mysql字元和數字型別轉換的問題研究MySql字元型別
- 關於工作中遇到的問題
- 關於cuda中的函式問題函式
- 相同 App 同步迭代中的測試問題APP
- 關於 Laravel6.0 開發中的簡單小問題解答Laravel
- #關於學Web時遇上的奇葩問題Web
- Leetcode刷題中關於java的一些小問題LeetCodeJava
- 關於快取命中率的幾個關鍵問題!快取
- 關於this指向的問題
- MySQL 中字元編碼問題MySql字元
- 快取 Laravel 模型的小問題快取Laravel模型
- 關於python中填充缺失值的問題Python
- 關於setInterval和setTImeout中的this指向問題
- 關於 mysql 中的 rand () 查詢問題MySql
- 深入剖析go中字串的編碼問題——特殊字元的string怎麼轉byte?Go字串字元
- 【學習】分享幾個學習中的小問題
- 關於javascript的this指向問題JavaScript
- 關於 Puerts 的效能問題
- SpringBoot中關於Mybatis使用的三個問題Spring BootMyBatis
- Elasticsearch中關於transform的一個問題分析ElasticsearchORM
- [20211018]運維中關於history的問題.txt運維
- 關於盒模型相關的問題模型
- 關於dataWithContentsOfFile 讀取大檔案的記憶體問題記憶體
- 自問自答系列——關於 Laravel6.0 開發中的簡單小問題解答Laravel
- 關於Filter中ServletRequest強轉HttpServletRequest問題FilterServletHTTP
- 關於跨域問題跨域
- 字元編碼問題字元
- 關於 Android studio 在xml中不提示的問題AndroidXML
- Java中關於二分查詢的問題Java
- 關於 Laravel 分頁的問題?Laravel