回文
タイトルの説明
整数が回文かどうかを判別します。パリンドロームの数は、同じ順序(左から右)および逆の順序(右から左)で読み取られる整数を指します。
問題解決のアイデア
番号の逆順が元の番号と同じかどうかを判断する
コードの実装
class Solution {
public:
bool isPalindrome(int x) {
if(x<0)
return false;
long num = x;
long cur = 0;
while(num)
{
cur = cur*10 + num%10;
num /= 10;
}
return cur == x;
}
};
正規表現マッチング
タイトルの説明
文字列sと文字パターンpを指定します。「。」と「*」をサポートする正規表現マッチングを実装してください。
'。'は任意の1文字に一致します
'*'は0以上の前の要素に一致します。
いわゆる一致は、文字列の一部ではなく、文字列全体を対象としています。
説明:
sは空で、azからの小文字のみが含まれている可能性があります。
pは空で、azからの小文字と文字と*のみを含むことができます。
問題解決のアイデア
- sの最初の文字がpの最初の文字と等しい場合、またはpの最初の文字が等しい場合、後者の文字が*ではない場合、最初の文字を削除した後、文字列sを直接調べます文字列は、文字列pから最初の文字を削除した文字列と一致できますか
- p文字列の最初の文字の後の文字が*の場合、それは状況を分割する時です:
2.1 1つは0に一致することであり、pのこれら2つの文字をスキップする必要があるだけで、sに進みます。
2.2 の文字を比較します。もう1つは複数の文字を一致させることです。次にカーソルをsの1つ後ろに移動し、
2.3の判断を続けます。これらの2つの条件のいずれかが満たされる限り
コードの実装
class Solution {
public:
bool isMatch(string s, string p) {
//代码完整性
if (p.length() == 0)
return s.length() == 0;
//第一个字符匹配
bool match = (s.length() > 0 && (s.at(0) == p.at(0) || p.at(0) == '.'));
//特殊情况
if (p.length() > 1 && p.at(1) == '*'){
//匹配0个,跳过p中的这两个字符;或多个,s往后移动一个继续匹配
return isMatch(s, p.substr(2)) || (match && isMatch(s.substr(1), p));
} else {
//一般情况
return match && isMatch(s.substr(1), p.substr(1));
}
}
};