兩個字符串相互查詢,並且找出相同的內容

@zgcwkj  2021年01月11日

分類:

代碼 其它 

兩個字符串相互查詢,並且找出相同的內容,時間複雜度非 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;
    }
}

水平有限僅供參考,如果有更好的建議,扔出來!!!



評論已關閉

  1. 前段時間過來逛了一下,發現比較前面的文章都評論不了

    C# 不會,只能看個大概意思,看到 goto 比較方,哈哈。。

    題目的意思不是太明白,是想判斷字符串內容完全相同(不需要管順序)?

    是這個意思的話,我的方法是:分別遍曆兩個字符串成兩個 map,然後再一次循環比較兩個 map (key 是一個字符,value 是這個字符出現的次數)
    時間複雜度:O(3n) 忽略常數,即為 O(n)
    空間複雜度:O(2n) 忽略常數,即為 O(n)

    1. @LukaChen

      1、有垃圾評論,索性關了
      2、goto 只是為了省一次相同的代碼,在實際代碼中是不建議用的
      3、和代碼比較有點類似,連續相同的作為輸出,並不是查找字符的出現次數。其實是兩個字符串,找出連續相同的字符

      1. @zgcwkj

        垃圾評論,可以裝 CommentFilter 插件過濾一下

        哦,那應該是公共子串的概念吧。

        1. @LukaChen

          謝了哈,裝了~

Top