我刚刚进行了一次Codility测试,想知道为什么我的解决方案仅获得37/100。问题是给您一个String,并且必须通过它搜索有效的密码。
规则如下:

1)有效密码以大写字母开头,不能包含任何数字。输入限制为a-z,A-Z和0-9的任意组合。

2)他们希望您创建的方法是返回最大有效密码的大小。因此,例如,如果您输入“ Aa8aaaArtd900d”,则数字4假定是通过解决方法输出的。如果找不到有效的字符串,则该方法应返回-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;
 }
}


添加了更新的解决方案,是否有进一步优化的想法?

最佳答案

您的解决方案太复杂了。由于不要求您找到最长的密码,而只是找到最长的密码的长度,因此没有必要使用最长的密码来创建或存储字符串。因此,您不需要使用substringString的数组,只需使用int变量。

查找解决方案的算法很简单:


创建一个int pos = 0变量以表示s中的当前位置
循环搜索下一个候选密码
从位置pos开始,找到下一个大写字母
如果您到达了行尾,请退出
从大写字母的位置开始,找到下一个数字
如果您到达了行尾,请停止
找到数字位置(或行尾)与大写字母位置之间的差异。
如果差异大于先前找到的max,请用差异替换max
pos移至最后一个字母(或行尾)的位置
如果poss.length下,则继续执行步骤2的循环
返回max


Demo.

关于java - Java通过字符串搜索有效的字符序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33202253/

10-12 00:58
查看更多