面試常遇到的萬用字元匹配的兩個小問題總結
題目一:給定兩個字串s和p,s為原串,p為含有萬用字元的串,其中關於萬用字元的定義為:“*”表示可以匹配任意字串,“.”表示可以匹配任意字元
class Solution
{
public:
bool isMatch(const char *s, const char *p)
{
if (*s == '\0')
{
while(*p == '*') p++;
return *p == '\0';
}
if (*p == '\0') return false;
while (*s && *p)
{
if (*s != *p)
{
if (*p == '?') s++, p++;
else if (*p == '*')
{
while(*p == '*') p++;//跳過連續的*號
if (*p == '\0') return true;//如果跳過*號就到達結尾,那麼是匹配的
while (*s)
{
if (isMatch(s, p)) return true;//不停的嘗試
s++;
}
}
else return false;
}
else s++, p++;
}
return isMatch(s, p);
}
};
題目二:給定兩個字串s和p,s為原串,p為含有萬用字元的串,其中關於萬用字元的定義為:“*”表示前面的字元可以出現任意多次(包括 0),“.”表示可以匹配任意字元
class Solution
{
public:
bool isMatch(const char *s, const char *p)
{
if (s == NULL || p == NULL)
return false;
if (*p == '\0')
return *s == '\0';
if (*(p+1) == '*')
{
//
// notice: ".*" means repeat '.' 0 or more times
//
while ((*s != '\0' && *p == '.') || *s == *p)
{
if (isMatch(s, p + 2))
return true;
s += 1;
}
return isMatch(s, p + 2);
}
else if ((*s != '\0' && *p == '.') || *s == *p)
{
return isMatch(s + 1, p + 1);
}
return false;
}
};
相關文章
- 常見物件-StringBuffer的兩個小面試題物件面試題
- 面試官常問的位運算問題總結面試
- 面試小冊:面試官經常問的十個棘手的 JavaScript 問題面試JavaScript
- 專案中遇到的RediS快取問題及面試問題總結Redis快取面試
- 用Unitils測試BaseDao遇到的問題總結
- 初試微信小程式遇到問題總結微信小程式
- 配置tnsnames.ora遇到的幾個問題總結
- 阿里JAVA開發面試常問問題總結阿里Java面試
- 一個兩年Java的面試總結Java面試
- 部署weblogic遇到的問題總結Web
- Java面試常問的幾個問題Java面試
- 總結Java開發面試常問的問題,持續更新中~Java面試
- 大資料面試常見的面試題總結大資料面試題
- 10 個常問的 JS 面試題JS面試題
- 兩個流程鏈路問題的排查和總結
- 面試中遇到的問題面試
- 面試官常問的Nginx的幾個問題面試Nginx
- 【轉】一個兩年Java的面試總結Java面試
- vue專案中遇到的問題總結Vue
- 總結一下最近遇到的問題
- React開發中遇到的問題總結React
- 面試問題總結面試
- 【轉】程式設計師求職面試中經常遇到的面試問題程式設計師求職面試
- 適配Android N遇到的兩個問題Android
- Webpack常見面試題總結Web面試題
- iOS常見面試題總結iOS面試題
- mybatis和springmvc整合遇到的問題小結MyBatisSpringMVC
- 面試官常問的Nginx的那幾個問題?面試Nginx
- impdp遇到char字元含中文的問題字元
- OpenJudge 帶萬用字元的字串匹配字元字串匹配
- 常見問題總結
- 總結一下本週遇到的問題
- 提交Spark作業遇到的NoSuchMethodError問題總結SparkError
- Android中使用WebView遇到的問題總結:AndroidWebView
- 升級 node18 遇到的問題總結
- 給ocr增加ocrmirror時遇到的問題總結
- 機器學習常見的演算法面試題總結機器學習演算法面試題
- 微信小程式開發中遇到的幾個小問題微信小程式