演算法 字串陣列問題

2021-10-01 02:05:54 字數 1923 閱讀 3360

在長度為n的母串中匹配長度為m的子串

brute-force演算法:(暴力求解)順序遍歷母串,將每個字元作為匹配字元,判斷是否匹配子串。時間複雜度o(m*n)

char * strstr(const char *str,  const char * target)

if ( !*p2 )

return p1begin;

p1 = p1begin+1;

}return null;

}

rabin-karp演算法:

確定字串中的字元是否唯一

hashmap:

bool is unique(string input)

unordered_maphashmapa;

unordered_maphashmapb;

for(int i = 0; i < stringa.length(); i++)

if(hashmapa.size() != hashmapb.size())

unordered_map::iterator it;

for(it = hashmapa.begin(); it != hashmapa.end(); it++)

}return ture;

}

將news*****和message作為兩個字串,檢查訊息是否可以用報紙中的字母組成

message中任意字元出現次數要小於其在news*******現的次數

bool iscompose(string news*****, string message)

for(int i = 0; i < news*****.length(); i++)

for (i = 0; i < message.length; i++)

}return true;

在乙個陣列中查詢是否有其中兩個數字相加的和為目標數

vectoraddstotarget(vector&numbers, int target)

numtoindex[*it] = (int)(it - numbers.begin());//相當於儲存第乙個數的下標}}

獲取陣列中最長連續元素序列的長度

struct bound

};int longestconsecutive(vector&num)

if (table.count(local + 1))//查詢當前元素+1是否在雜湊表中

//對於沒有連續序列的單個元素,low與high都等於自身

//對於連續序列,low和high將更新為當前最小值和最大值

table[low].high = table[local].high = high;

table[high].low = table[local].low = low;

if (high - low + 1 > maxlen)

}return maxlen;

}

注意防止訪問越界

int longestcommonsubstring(string &a, string &b)

int lcs = 0, lcs_temp = 0;

for (int i = 0; i < a.size(); ++i)

if (lcs_temp>lcs)

} } return lcs;

}

字串陣列問題

這個題目關鍵就是如何處理乙個一千位的數,當時考慮用long long int 等發現都不可行,於是把思路放到了陣列,又首先考慮到了是整形陣列,但是後來發現,如果使用整形陣列會導致很難區分這個數個位之後的零和其他位的零。於是利用了字串型陣列。這題也讓我撿起來了幾個知識點1.當把乙個字串按字元乙個個放入...

演算法 字串問題 翻轉字串

翻轉字串 給定乙個字元型別的陣列chas,請在單詞間作逆序調整。只要做到單詞順序逆序即可。例如,如果看成字串 dog loves pig 則調整為 pig loves dog 過程 先整體逆序,在區域性單詞逆序 public static void rotateword char chas reve...

字元陣列和字串陣列 0 問題

字元陣列 include include using namespace std int main int argc,char const ar 單字元儲存則不會有 0 cout sizeof x sizeof y strlen x strlen y zl laptop 2abl2n6v mnt d...