字串匹配演算法 微軟面試100題 第三十三題

2021-06-26 19:46:54 字數 1303 閱讀 2026

題目要求:

給一串很長字串,要求找到符合要求的字串。

例如目的串:123,則1*****3***2,12*****3這些都要找出來。

其實就是類似一些和諧系統。。。。。。

題目分析:

1.假如目的串為:"423",輸入長字串為:"4fsdfk2jfl3fd2jfksd3j4d4d4jkfd4jd3kdf2",則應該輸出  "4fsdfk2jfl3","2jfksd3jld4","4jd3kdf2".

2.使用c++中的map《字元,個數》,先把目的串的每個字元都存入map中,且每個字元的個數初始化為1.然後逐個遍歷長字串中的字元,如果該字元在map中有儲存且個數為1,則num加1,當num=n時,說明已經找到了n個目的串中的字元,可以輸出了,輸出之後又把map等變數重新初始化。startflag=1表示這一次遍歷還沒有找到長字串中的字元匹配到目的串中的字元,當第一次匹配時,則把startflag=0.同時startpos更新,startpos表示某一次遍歷時第一次匹配時的位置。

**實現:

#include #include using namespace std;

const int n = 3;

void handle(char *inputstr,char *desstr);

int main(void)

; char des = "423";

handle(input,des);

return 0;

}void printstr(char *start,char *end)

cout << *end;

cout << endl;

}void inithash(map&hash,char *str)

}void handle(char *inputstr,char *desstr)

++hash[*inputstr];

num++;

if(num==3)

}//第乙個匹配字元連續出現時,選擇最後乙個

//如選擇輸出"4jd3kdf2"而不是"4d4d4jkfd4jd3kdf2",因為第乙個匹配的為4,有多個

//連續的4,選最後乙個

else if(*startpos == *inputstr)

}inputstr++;

}}

微軟面試100題 左旋字串

定義字串的左旋操作 將字串前面的若干個字元移動到字串的尾部 如 abcde 左旋2位 cdeab 思路 ab ba cde edc baedc cdeab 分3部分反轉 public static void leftstr 1 stringbuilder str,int k private stat...

微軟演算法100題26 左旋轉字串

26.左旋轉字串 題目 定義字串的左旋轉操作 把字串前面的若干個字元移動到字串的尾部。如把字串abcdef 左旋轉2 位得到字串cdefab。請實現字串左旋轉的函式。要求時間對長度為n 的字串操作的複雜度為o n 輔助記憶體為o 1 思路 先反轉整個字串 fedcba 在分別反轉各個子字串 fedc...

微軟100題 010反轉字串

翻轉句子中單詞的順序。題目 輸入乙個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如輸入 i am a student.則輸出 student.a am i include include include include u...