每日一題 77 字串萬用字元

2021-10-08 20:10:45 字數 1324 閱讀 8766

題目描述

問題描述:在計算機中,萬用字元一種特殊語法,廣泛應用於檔案搜尋、資料庫、正規表示式等領域。現要求各位實現字串萬用字元的演算法。

要求:實現如下2個萬用字元:

*:匹配0個或以上的字元(字元由英文本母和數字0-9組成,不區分大小寫。下同)

?:匹配1個字元

輸入:萬用字元表示式;

一組字串。

輸出:返回匹配的結果,正確輸出true,錯誤輸出false

輸入描述:

先輸入乙個帶有萬用字元的字串,再輸入乙個需要匹配的字串

輸出描述:

返回匹配的結果,正確輸出true,錯誤輸出false

示例1

輸入

te?t*.*

txt12.xls

輸出false

解題思路:

本題可以通過遞迴求解。從前向後一次匹配,遇到相同字元,都向後移動乙個字元,如果萬用字元遇到"?",則不需匹配,自動跳過乙個字元,如果萬用字元遇到"*",則可以匹配任意多個字元,包括0個,此時可以有三種選擇,

匹配0個,萬用字元向後移動乙個字元,字串不動。

匹配1個,萬用字元和字串都向後移動乙個 字元。

匹配多個,萬用字元不動,字串向後移動乙個字元。

遞迴的終止條件:萬用字元或者字串遇到』\0』。當他們同時結束。

**示例:

#include

#include

using

namespace std;

bool

match

(const

char

* s1,

const

char

* s2)

//兩個字串有乙個先結束,則返回falseif(

*s1 ==

'\0'

||*s2 ==

'\0'

)//遇到?號,匹配乙個字元,跳過乙個位置if(

*s1 ==

'?')

// 遇到*號,匹配0個(str不挪動),1個(兩者都向前挪動乙個字元)或多個(str向前挪動乙個字元)

elseif(

*s1 ==

'*')

elseif(

*s1 ==

*s2)

return

false;}

intmain()

else

cout <<

"false"

<< endl;

}return0;

}

每日一題 87 字串過濾

題目來自網上 題目描述 通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串過濾程式,若字串中出現多個相同的字元,將非首次出現的字元過濾掉。要求實現函式 void stringfilter const char pinputstr,long linputlen,char poutputstr...

每日一題 12 字串壓縮

題目描述 對字串進行rle壓縮,將相鄰的相同字元,用計數值和字元值來代替。例如 aaabccccccddeee,則可用3a1b6c2d3e來代替。輸入描述 輸入為a z,a z的字串,且字串不為空,如aaabccccccddeee 輸出描述 壓縮後的字串,如3a1b6c2d3e 思路 建立乙個變數,...

每日一題 38字串相乘

給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 說明 class solution string a...