以下是关于 Glassdoor 的一个面试问题,我没有找到一个好的解决方案。
给定一个长度为 25 的字符串,由字母(小写和大写)和数字组成。现在,在这个字符串中,一些大写字母是小写的。所以它变成了一个损坏的字符串。假设有一个黑盒函数返回一个整数,比如 13 或 14,它表示输入字符串是正确的,否则它会引发异常。给定这个损坏的字符串,如何找到正确的原始字符串?
有人对这个问题有想法吗?
谢谢:)
以下是关于 Glassdoor 的一个面试问题,我没有找到一个好的解决方案。
给定一个长度为 25 的字符串,由字母(小写和大写)和数字组成。现在,在这个字符串中,一些大写字母是小写的。所以它变成了一个损坏的字符串。假设有一个黑盒函数返回一个整数,比如 13 或 14,它表示输入字符串是正确的,否则它会引发异常。给定这个损坏的字符串,如何找到正确的原始字符串?
有人对这个问题有想法吗?
谢谢:)
假设黑盒函数(假设它也适用于子字符串)声明如下:
public Integer isCorrectString(String value) throws Exception;
我们可以编写一个小循环来纠正您的 25 长度字符串,如下所示:
String inputString ="abcd...";
for(int i=1; i<=25; i++){
try{
isCorrectString(inputString.substring(0, i));
}catch(Exception ex) {
//change the char at ith position to upper case as its incorrect
inputString = inputString.substring(0, i-1)+
inputString.substring(i-1, i).toUpperCase()+
inputString.substring(i+1);
}
}
循环后,inputString
应予以纠正。
直接的解决方案是将输入字符串中的小写字母更改为大写,并检查黑盒函数是否返回整数值(不例外)。应检查每个组合。最坏情况下的组合数是 2 的 25 次幂减 1