ASP.NET從字符串中查找字符出現(xiàn)次數(shù)的具體實現(xiàn)方法
首先想到的方法當然是從頭遍歷字符串并統(tǒng)計:
c1=0;
for(inti=0;i {
if(str[i]=='A')
{
c1++;
}
}
第二種方法也很容易想到,將字符串中所有要查找的字符去除,然后比較去除前后的字符串長度即可。這種方法遭到了某人的鄙視,據(jù)說性能很差而且多占空間。
c2=str.Length-str.Replace("A",String.Empty).Length;
接下來某人又提出了第三種方法,是用要查找的字符為分隔符,將原字符串分隔為多個子串,然后求子串的數(shù)目即可。在C#中這是一個寫起來很短的方法:
c3=str.Split(newchar[]{'A'}).Length-1;
我們從原理可以推斷出三者性能的順序,但究竟差距是多少呢,還是要動手試驗一下。這是非常經(jīng)典的測試代碼:
stringstr="SADTHDGSAFSDGTGHRDGSADFADDRHDFSGASDAA";
Stopwatchsw=newStopwatch();
longt;
intc=0;
GC.Collect();
Application.DoEvents();
sw.Start();
for(inti=0;i<100000;i++)
{
c=三種算法
}
sw.Stop();
t=sw.ElapsedMilliseconds;
首先我們確保正確性,經(jīng)測試三種方法都能正確處理多種情況,包括首尾、連續(xù)出現(xiàn)、不出現(xiàn)或串長度為0等,我所取的字符串是一個很普通的串。編譯為Release版,預運行10次后獲得以下結(jié)果:
遍歷統(tǒng)計:13毫秒
替換后比較長度:112毫秒
斷開字符串后計數(shù):233毫秒
這里已經(jīng)體現(xiàn)出差異,遍歷統(tǒng)計比替換后比較要快10倍,斷開字符串又要慢一些。接下來我又做了如下兩個測試:
1、不改變字符串的長度,增加或減少要查找字符串的個數(shù)。
2、不改變要查找字符出現(xiàn)的頻率,但增長字符串的長度。
結(jié)果發(fā)現(xiàn),三種方法都隨字符串長度增加線性變慢,而后兩種方法還隨要查找的字符增加而變慢。
斷開字符串的方法還受要查找字符串分布情況的影響。
研究Replace函數(shù)和Split函數(shù)的實現(xiàn)可以徹底解決這個問題。不過我沒有心情細細研究了,我還是決定選用第二種方法——替換后比較長度。雖然其速度比第一種方法慢,但易于改寫為求長度不為1的子串出現(xiàn)次數(shù)的方法。第一種方法若改為求長度大于1的字串就要考慮很多因素(盡管不一定真的很麻煩),我懶得想了,呵呵。
- 利用json獲取字符出現(xiàn)次數(shù)的代碼
- 統(tǒng)計jQuery中各字符串出現(xiàn)次數(shù)的工具
- 找出字符串中出現(xiàn)次數(shù)最多的字母和出現(xiàn)次數(shù)精簡版
- JavaScript計算字符串中每個字符出現(xiàn)次數(shù)的小例子
- java字符串比較獲取字符串出現(xiàn)次數(shù)的示例
- php查找字符串出現(xiàn)次數(shù)的方法
- php獲取字符串中各個字符出現(xiàn)次數(shù)的方法
- JavaScript實現(xiàn)計算字符串中出現(xiàn)次數(shù)最多的字符和出現(xiàn)的次數(shù)
- python統(tǒng)計字符串中指定字符出現(xiàn)次數(shù)的方法
- C語言統(tǒng)計輸入字符各個字母出現(xiàn)頻率的解題思路
相關(guān)文章
ASP.Net中的async+await異步編程的實現(xiàn)
這篇文章主要介紹了ASP.Net中的async+await異步編程的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08.NET?Core利用?AsyncLocal?實現(xiàn)共享變量的代碼詳解
在Web?應用程序中,我們經(jīng)常會遇到這樣的場景,如用戶信息,租戶信息本次的請求過程中都是固定的,我們希望是這種信息在本次請求內(nèi),一次賦值,到處使用。本文就來探討一下,如何在.NET?Core?下去利用AsyncLocal?實現(xiàn)全局共享變量2022-04-04ASP.NET Core2讀寫InfluxDB時序數(shù)據(jù)庫的方法教程
Influxdb是一個開源的分布式時序、時間和指標數(shù)據(jù)庫,使用go語言編寫,無需外部依賴,下面這篇文章主要給大家介紹了關(guān)于ASP.NET Core2讀寫InfluxDB時序數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下2018-11-11