题目:
给定一个只包括 '(',')','{','}','[',']' 的字符串,
判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
这里没有那么难去实现,用python ,我们可以利用str的替换的方式去实现,方法如下:
class Solution:
def isValid(self, s: str) -> bool:
while "{}" in s or "()" in s or "[]" in s:
s = s.replace('{}', '')
s = s.replace('[]', '')
s = s.replace('()', '')
return s == ''
那么我们看下对应的测试用例
class TestONeSolution(TestCase):
def setUp(self) -> None:
self.sone=Solution()
def test_isValid(self):
self.assertTrue(self.sone.isValid(""))
def test_isValidone(self):
self.assertFalse(self.sone.isValid("{"))
def test_isValidtwo(self):
self.assertTrue(self.sone.isValid("{}"))
运行结果:
那么我们来看下覆盖率
虽然我们的代码覆盖率是100%,但是我们实际的业务场景还是没有覆盖完呢,所以,代码覆盖率的100%不代表用例完全覆盖所有业务场景,只是代码我们覆盖了现有的业务的分支。但是可能里面还是有bug的存在的,如果没有100%的覆盖率,肯定是存在bug的。
我们来看下java的实现。
public class Code312 {
public boolean isValid(String s) {
if (s.contains("()") || s.contains("[]") || s.contains("{}")) {
return isValid(s.replace("()", "").replace("[]", "").replace("{}", ""));
} else {
return "".equals(s);
}
}
}
我们看下测试代码,
public class Code312Test {
@Test
public void testIsValid() {
Code312 code312=new Code312();
assertTrue(code312.isValid(""));
}
@Test
public void testIsValid1() {
Code312 code312=new Code312();
assertFalse(code312.isValid("{"));
}
@Test
public void testIsValid2() {
Code312 code312=new Code312();
assertTrue(code312.isValid("{}"));
}
@Test
public void testIsValid3() {
Code312 code312=new Code312();
assertFalse(code312.isValid("("));
}
@Test
public void testIsValid4() {
Code312 code312=new Code312();
assertTrue(code312.isValid("()"));
}
@Test
public void testIsValid5() {
Code312 code312=new Code312();
assertFalse(code312.isValid("{"));
}
}
运行结果
覆盖率的情况
其实题目都不难的,我们慢慢的去分析这些问题即可。