[问答题]
请编写程序,给定一个字符串,输出字符串中左花括号‘{’和右花括号‘}’的匹配次数。
匹配要求:
1、采用就近匹配原则
2、左花括号在前,右花括号在后
3、若左花括号连续出现,需要相同数目且连续的右花括号才能完成一次匹配
示例如下:
1、“aabbcc”,输出0
2、“{aa{{bb}cc}}”,输出0
3、“{aa{{bb}}cc”,输出1
4、“{aa{{bb}}cc}”,输出2
5、“aa}bb{cc”,输出0
6、“aa{bb}cc”,输出1
7、“aa{{bb}cc}”,输出0
8、“aa{{bb}}cc”,输出1
实现关键函数即可,可以参考以下函数原型:
int GetBraceMatchCount(const string& str);
提示:
1、不能使用比较字符串的库函数,以及==和!=的重载
2、可以使用自己擅长的语言
   //TypeScript
  public static GetBraceMatchCount(s: string): number {
        let left: number = 0;
        let right: number = 0;
        let matchCount: number = 0;
        let stack = [];
        for (let i = 0; i < s.length; i++) {
            if (s[i] == "{") {
                left++;
            }
            else if (s[i] != "{" && left != 0) {
                stack.push(left);
                left = 0;
            }
            else if (s[i] == "}") {
                right++;
                if(i == s.length - 1 && right != 0) {
                    let top = stack[stack.length - 1];
                    if (right == top) {
                        matchCount++;
                    }
                }
            }
            else if (s[i] != "}" && right != 0) {
                let top = stack[stack.length - 1];
                if (right == top) {
                    matchCount++;
                }
                stack.pop()
                right = 0;
            }
        }
        return matchCount;
    }
发表于 2024-05-17 11:51:34 回复(0)