思路一:
顺着看,看右括号,每个右括号都有左括号或者*与之匹配
逆着看,看左括号,每个左括号都有右括号或者*与之匹配
bool isValidString(char* s ) {
// 每一个右括号都有一个左括号或者*与之匹配
int L=0,S=0,i=0;
while(s[i] != '\0'){
if(s[i] == '('){
L++;
}
else if(s[i] == '*'){
S++;
}
else if(s[i] == ')'){
if(L>0) L--;
else if(S>0) S--;
else return 0;
}
i++;
}
// 每一个左括号都有一个右括号或者*与之匹配
int R=0,S2=0;
i=strlen(s)-1;//注意是逆序,倒着看
while(s[i] != '\0'){
if(s[i] == ')'){
R++;
}
else if(s[i] == '*'){
S2++;
}
else if(s[i] == '('){
if(R>0) R--;
else if(S2>0) S2--;
else return 0;
}
i--;
}
if(L<=S && R<=S2) return 1;
else return 0;
}
思路二:
用链表,方便删除节点,没有实现



京公网安备 11010502036488号