唯一の3つの文字クラス:(、)と*を含む文字列を考えると、文字列が有効な文字列であるかどうかをテストする関数を記述します。有効な文字列は、次のルールがあります。
どれ左括弧(対応する右括弧を持っている必要があります)。
どれ右括弧)(。対応する左括弧を持っている必要があります
。左かっこ(対応する右括弧の前でなければなりません)
)*シングル右括弧として見ることができる、または、単一の左括弧(または空の文字列。
空の文字列また、有効な文字列とみなされます。
アイデア:
(及び各スタック、その後置く次に議論、()文字列を横断みなされる)場合、
この時点で(指数がより大きくなければならないとみなされる前に)
class Solution {
public boolean checkValidString(String s) {
stack<int> left,star;
for(int i=0;i<s.size();i++){
if(s[i]=='(') left.push(i);
else if(s[i]=='*') star.push(i);
else {
if(left.empty() && star.empty()) return false;
if(!left.empty()) left.pop();
else
star.pop();
}
}
while(!left.empty()&&!star.empty()){
if(left.top()>star.top)return false;
left.pop();
star.pop();
}
return left.empty();
}
}