/**
* 【问题】
* 括号字符串的有效性
* 给定一个字符串str, 判断是不是整体有效的括号字符串。
* 【举例】
* str="()", 返回true;
* str="(()())", 返回true;
* st1="(())", 返回true。
* str="())",返回false;
* str="()(", 返回false;
* str="()a()"' 返回false。
* 【解答】
* l. 从左到右遍历字符串str, 判断每一个字符是不是"("或")",如果不是,就直接返回false。
* 2. 遍历到每一个字符时,都检查到目前为止"("和")"的数量, 如果")"更多,则直接返回false。
* 3. 遍历后检查"("和")"的数量, 如果一样多, 则返回true, 否则返回false。
*
* @author 雪瞳
* @Slogan 时钟尚且前行,人怎能再此止步!
* @Function
*
*/
public class IsValid {
public static boolean isValid(String string){
if ("".equals(string)||string == null){
return false;
}
char[] words = string.toCharArray();
int left = 0;
int right = 0;
for (int i = 0; i!=string.length();i++){
if (!"(".equals(words[i]) || !")".equals(words[i])){
return false;
}
if ("(".equals(words[i])){
left++;
}
if (")".equals(words[i])){
right++;
}
if (left<right){
return false;
}
}
if (left == right){
return true;
}
return false;
}
public static void main(String[] args) {
String string = "(()a())";
String string2 = "))((";
boolean valid = isValid(string2);
if (valid){
System.out.println("yes");
}else {
System.err.println("no");
}
}
}