關於字串中取相同的字元問題(小學題)
有個新入門的學弟,在群裡發了這樣一個題目:
/*
*“出南門,走六步,見著六叔和六舅,叫聲六叔和六舅,借我六斗六升好綠豆;過了秋,打了豆,
* 還我六叔六舅六十六斗六升好綠 豆。”
* 有上面的字串內容。使用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了。
相關文章
- 關於過濾字元的問題字元
- 關於 Laravel 中 Ajax 問題的小結Laravel
- 關於SQLServer中的字元儲存的問題的測試SQLServer字元
- 關於兩組相同的radio同步問題
- 關於JdonFramework的快取問題Framework快取
- 關於SQL Server中的字元儲存的問題的測試SQLServer字元
- 關於CSS中的float可能出現的小問題CSS
- 關於 Hibernate快取的問題快取
- 關於filter獲取session的問題!!!FilterSession
- 請教關於快取的問題快取
- 關於微信小程式swiper的問題微信小程式
- banq先生,關於快取問題快取
- 關於陣列的物件獲取及排序問題/小程式的多層頁面返回問題陣列物件排序
- 關於海量資料的獲取問題
- url中的特殊字元問題字元
- 關於學習java中的按位取反(~)的問題Java
- 關於PCA降維中遇到的python問題小結PCAPython
- Oracle錄入特殊字元 [&] 的小問題Oracle字元
- 談談關於前端的快取的問題前端快取
- Oracle學習系列—關於字元數字混合排序和中文排序的問題Oracle字元排序
- 面試有關字串中字元出現重複字元的面試問題,這裡都有了面試字串字元
- 如何獲取字串中相同字元出現的次數字串字元
- 關於 RocketMQ ClientID 相同引發的訊息堆積的問題MQclient
- 關於工作中遇到的問題
- 關於cuda中的函式問題函式
- 關於 iOS 10 中 ATS 的問題iOS
- 關於struts中html:errors/的問題HTMLError
- 求救:關於讀取excel資料的問題Excel
- 關於根據USERNAME取密碼的問題密碼
- 關於 AppCrawler 執行過程中的幾個小問題APP
- 關於 Laravel6.0 開發中的簡單小問題解答Laravel
- 關於介面實現的一個小問題
- 我來提個關於Iterator的小問題
- 關於mysql字元和數字型別轉換的問題研究MySql字元型別
- #關於學Web時遇上的奇葩問題Web
- 提個小問題--關於jdbc事務JDBC
- jquery中的小問題jQuery
- 關於 mysql 中的 rand () 查詢問題MySql