FooBar java反向字母代码

时间:2017-04-27 03:03:43

标签: java

我一直试图让这段代码适用于Google foobar挑战,但我无法通过十个隐藏的测试用例中的两个。代码希望您输入一个字符串并解码'它通过向后取字母的等效字母并用它替换它。此代码忽略大写字母和标点符号。

        public static void main(String[] args)
{
    System.out.println(answer("wrw blf hvv ozhg mrtsg'h vkrhlwv?"));
}

public static String answer(String s) { 

    String decode = "";
    char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
    char[] alphabet2 = "zyxwvutsrqponmlkjihgfedcba".toCharArray();

    for(int i = 0; i < s.length(); i++)
    {
        int cint = (int)s.charAt(i);

        boolean b = Character.isUpperCase(s.charAt(i));
        if(b)
        {
            decode = decode + s.charAt(i);


        }

        if(!Character.isDigit(s.charAt(i)) && !Character.isLetter(s.charAt(i)))
        {
            decode = decode + s.charAt(i);
        }
        else
        {
            if(!b)
            {
            int h = search(s.charAt(i), alphabet);
            decode = decode + alphabet2[h];
            }
        }

    }

    return decode;

    // Your code goes here.

} 
public static int search(char x, char[] y)
{
    int p = 0;
    for(int o = 0; o < y.length; o++)
    {
        if(y[o] == x)
        {
            p = o;;
        }
    }
    return p;
}

1 个答案:

答案 0 :(得分:0)

您的代码不会忽略数字。现在,abc1234def - &gt; zyxzzzzwvu,我认为它应该是zyx1234wvu

尝试简化代码。在跳入之前花一些时间考虑它。在各处都有一堆if语句会让事情变得难以理解和调试。

public static String answer2(String s)
{
    String decoded = "";
    String alphabet = "abcdefghijklmnopqrstuvwxyz";
    String alphabet2 = "zyxwvutsrqponmlkjihgfedcba";

    for (char c : s.toCharArray()) {
        if (c < 'a' || c > 'z') {
            // This is not a letter. Just repeat it verbatim.
            decoded += c;
        } else {
            // This is a letter. Flipify it.
            int pos = alphabet.indexOf(c);
            decoded += alphabet2.charAt(pos);               
        }
    }
    return decoded;
}

如果此代码失败,那么很可能您没有完全描述问题约束。也许有些复制+粘贴是有序的。