我刚接受了一项痘痘测试,并想知道为什么我的解决方案只获得了37/100。问题是您获得了String
并且必须在其中搜索有效密码。
以下是规则:
1)有效密码以大写字母开头,不能包含任何数字。输入仅限于a-z,A-Z和0-9的任意组合。
2)他们希望您创建的方法是返回最大有效密码的大小。因此,例如,如果您输入" Aa8aaaArtd900d" ,则假设数字4由解决方法输出。如果找不到有效的String,则该方法应返回-1
我似乎无法弄清楚我的解决方案出了什么问题。任何帮助将不胜感激!此外,对于如何更好地测试此类代码的任何建议都将非常感激。
class Solution2 {
public int solution(String S) {
int first = 0;
int last = S.length()-1;
int longest = -1;
for(int i = 0; i < S.length(); i++){
if(Character.isUpperCase(S.charAt(i))){
first = i;
last = first;
while(last < S.length()){
if(Character.isDigit(S.charAt(last))){
i = last;
break;
}
last++;
}
longest = Math.max(last - first, longest);
}
}
return longest;
}
}
添加了更新的解决方案,是否有任何想法进一步优化?
答案 0 :(得分:1)
你的解决方案太复杂了。由于没有要求您找到最长密码,只有最长密码的长度,因此没有理由创建或存储具有该最长密码的字符串。因此,您无需使用substring
或String
个数组,只需使用int
个变量。
找到解决方案的算法很简单:
int pos = 0
s
变量
pos
开始,找到下一个大写字母max
,请将max
替换为差异pos
提升到最后一个字母(或行尾)的位置pos
位于s.length
下,请继续执行第2步中的循环max
。