微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby – 从字符串中删除不匹配的括号

我想从字符串中删除“un-partnered”括号.

即,在字符串中的某个地方,所有(除非它们后面跟着,否则应该删除).同样地,所有)之前都没有(字符串中的某个地方应该被移除).

理想情况下,算法也会考虑嵌套.

例如.:

"(a)".remove_unmatched_parents # => "(a)"
"a(".remove_unmatched_parents # => "a"
")a(".remove_unmatched_parents # => "a"

解决方法

而不是正则表达式,或许考虑下推自动机. (我不确定Ruby正则表达式是否可以处理这个,我相信Perl可以).

一个(非常简单的)过程可能是:

对于输入字符串中的每个字符:

>如果它不是'(‘或’)’,那么只需将其附加到输出
>如果它是'(‘增加一个seen_parens计数器并添加
>如果它是’)’并且seen_parens是> 0,添加它并减少seen_parens.否则跳过它.

在该过程结束时,如果seen_parens是> 0然后从最后开始删除那么多的parens. (此步骤可以使用堆栈或递归合并到上面的过程中.)

整个过程是O(n),即使开销相对较高

快乐的编码.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐