Java字符串排列校验:代码测试用例失败,求排查失效场景
字符串互为排列判断代码的错误测试用例分析
问题背景
给定两个字符串str1和str2,判断二者是否互为排列(即其中一个字符串的字符经重新排列后可与另一个完全一致)。输入为两行无首尾空格的小写字母字符串,输出为true或false。
编写的Java代码
public static boolean isPermutation(String str1, String str2) { //Your code goes here boolean ans=false; if (str1.length()==str2.length()){ for (int i=0;i<str1.length();i++){ ans=false; for (int j=0;j<str2.length();j++){ if (str1.charAt(i)==str2.charAt(j)){ ans=true;} } if (ans == false){ break;} } }else{ return false; } return ans; }
导致失败的测试用例
字符种类相同但出现次数不一致的等长字符串会让代码出错,例如:
- str1 = "aab"
- str2 = "abb"
错误原因
这段代码仅检查str1的每个字符是否在str2中存在,完全没验证字符的出现次数是否匹配。对上述测试用例:
- 遍历
str1的每个字符时,第一个a、第二个a、第三个b都能在str2中找到,代码会返回true。 - 但实际上"aab"和"abb"的字符出现次数差异明显(
a出现2次vs1次,b出现1次vs2次),无法通过重排得到彼此,正确结果应为false,所以代码在此测试用例下输出错误。
内容的提问来源于stack exchange,提问作者coder
相关产品推荐
相关产品推荐

