面試常遇到的萬用字元匹配的兩個小問題總結
題目一:給定兩個字串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;
}
};
相關文章
- 面試官常問的位運算問題總結面試
- 面試小冊:面試官經常問的十個棘手的 JavaScript 問題面試JavaScript
- 初試微信小程式遇到問題總結微信小程式
- 專案中遇到的RediS快取問題及面試問題總結Redis快取面試
- 記錄後臺遇到的兩個小問題
- 大資料面試常見的面試題總結大資料面試題
- 一個兩年Java的面試總結Java面試
- 10 個常問的 JS 面試題JS面試題
- 總結Java開發面試常問的問題,持續更新中~Java面試
- 面試問題總結面試
- 面試官常問的Nginx的幾個問題面試Nginx
- 【轉】一個兩年Java的面試總結Java面試
- Webpack常見面試題總結Web面試題
- 四個常見的Linux面試問題Linux面試
- 面試官常問的Nginx的那幾個問題?面試Nginx
- RabbitMq面試問題總結MQ面試
- PHP面試問題總結PHP面試
- REDIS面試問題總結Redis面試
- 【Java問題面試總結】Java面試
- 【搞定 Java 併發面試】面試最常問的 Java 併發基礎常見面試題總結!Java面試題
- 一個兩年Java工程師的面試總結Java工程師面試
- android單元測試遇到問題總結Android
- 面試題(五)常見vue相關面試題總結面試題Vue
- 前端常見面試題少量總結前端面試題
- 面試遇到的redis相關問題面試Redis
- 超詳細的Java面試題總結(三)之Java集合篇常見問題Java面試題
- 兩個流程鏈路問題的排查和總結
- 常見的Java面試問題Java面試
- 10個常見的Redis面試"刁難"問題Redis面試
- 資料庫常見面試題總結資料庫面試題
- MySQL常見面試題總結[精讀]MySql面試題
- ES6常見面試題總結面試題
- 面試中遇到的一些問題面試
- 橫趟!面試中遇到的 ZooKeeper 問題面試
- vue專案中遇到的問題總結Vue
- Android中使用WebView遇到的問題總結:AndroidWebView
- React開發中遇到的問題總結React
- 2017年秋季遇到的相容問題總結
- 總結一下最近遇到的問題