兩個字符串相互查詢,並且找出相同的內容,時間複雜度非 O(n*n),C# 實例
以下內容為代碼,具體問題需具體解決
List<string> sameStr = new List<string>();
string strA = "主題是文章中通過具體材料所表達的基本思想";
string strB = "題是主文章中通過具體材的基本思想料所表達";
List<string> charStrA = strA.ToList().Select(T => T.ToString()).ToList();
List<string> charStrB = strB.ToList().Select(T => T.ToString()).ToList();
int ok = 0, startAIndex = 0, startBIndex = 0, endMark = 0;
foreach (var chara in charStrA)
{
int listAIndex = charStrA.IndexOf(chara);
int listBIndex = charStrB.IndexOf(chara);
if (ok == 1)
{
//找到沒有
if (listBIndex != -1)
{
//B是否連續
if (endMark == listBIndex - 1)
{
endMark = listBIndex;
goto gotoExit;
}
}
//輸出結果
string sameA = strA.Substring(startAIndex, listAIndex - startAIndex);
string sameB = strB.Substring(startAIndex, listAIndex - startAIndex);
if (sameA == sameB)//兩者完全相同的索引時
{
}
if (sameA.Length > 1)//兩個以上相同的字符
{
sameStr.Add(sameA);
}
ok = 0;
endMark = listBIndex;
}
gotoExit:
//防止丟失
if (listBIndex != -1 && ok == 0)
{
ok = 1;
startAIndex = listAIndex;
startBIndex = listBIndex;
}
}水平有限僅供參考,如果有更好的建議,扔出來!!!
版權屬於:zgcwkj
本文鏈接:https://www.zgcwkj.com/archives/163.html
轉載聲明:請注明本文章的標題及內容的出處和聲明,謝謝
前段時間過來逛了一下,發現比較前面的文章都評論不了
C# 不會,只能看個大概意思,看到 goto 比較方,哈哈。。
題目的意思不是太明白,是想判斷字符串內容完全相同(不需要管順序)?
是這個意思的話,我的方法是:分別遍曆兩個字符串成兩個 map,然後再一次循環比較兩個 map (key 是一個字符,value 是這個字符出現的次數)
時間複雜度:O(3n) 忽略常數,即為 O(n)
空間複雜度:O(2n) 忽略常數,即為 O(n)
1、有垃圾評論,索性關了
2、goto 只是為了省一次相同的代碼,在實際代碼中是不建議用的
3、和代碼比較有點類似,連續相同的作為輸出,並不是查找字符的出現次數。其實是兩個字符串,找出連續相同的字符
垃圾評論,可以裝 CommentFilter 插件過濾一下
哦,那應該是公共子串的概念吧。
謝了哈,裝了~