删除最外层的括号(c++):
法一(栈):新建一空字符串num,再创建一个空栈st,接着用for循环来遍历整个数组。先if判断,若元素为‘(’,则将字符入栈;若元素为‘)’,则将栈顶字符出栈,即该‘)’字符所在位置为空。如此循环,当遇到空格时,即找到一原组(此处与我想法相似,即找到两边单括号的数相等时,就找到了一个原组)。因为每一原组的首尾字符要删去,所以接着if判断,当遇到空字符时,不做操作;当遇到非空字符时,将该字符赋值到新字符串里去(从最开始的“(”就开始了)。最后,返回新数组num即可。
法二(计数):新建一空字符串num,再设一变量level=0,接着用for循环遍历整个数组。(先整体来一遍)先if判断,当字符为‘)’时,level--。再if判断,当level!=0时,则将该字符赋值给新字符串。最后if判断 ,当字符为‘(’时,level++。完毕。这个顺序是不能改变的,当leve=0时(一样),即得一原组,将‘(’判断放最后,即可去掉首字符;将‘)’放开始,即可在当level=0时,将一个原组的为字符给去掉。最后返回新字符串即可。
我:表示出数组长度n,接着表示初数组位置i,和表示从左往右的括号数right(右括号),left(左括号),接着就用for循环开始遍历数组操作。先if判断元素是左括号还是右括号,若左,则,left++;若右,则right++。接着判断,当right==left时,则,得到一个原组,去掉此次最开始的左括号,和当rightt==left时的右括号,即令其=‘ ’ 空即可,所以要在循环开始时要先令[i-1]=' ' 空。最后至循环结束,返回原数组即可。看似正确,但空格也占位置呀,所以是错的。那就想办法把空格除去。
学:c++的栈。(栈讲究“先进后出”,新元素进栈后只能位于栈顶,元素出栈时也只能从栈顶开始)