限制此回文代码中的处理时间

时间:2013-10-26 07:19:41

标签: java algorithm binary time-complexity palindrome

这是代码。我想提高代码的效率。

package palindrome;
import java.io.*;
import java.math.BigInteger;
import java.util.*;

public class Palindrome {


    static Stack<Character> ss=new Stack<Character>();

    public static void main(String[] args) throws IOException {
        // TODO code application logic here


        BufferedReader read = new BufferedReader(new InputStreamReader(System.in));

        String s[]=read.readLine().split(",");

        int min=Integer.parseInt(s[0]);
        int max=Integer.parseInt(s[1]);
        int finResult=palindrome(min,max);
        System.out.println(finResult);

    }


    public static int palindrome(int min,int max)
    {
        int result=0;
        for(int i=min; i<=max; i++)
        {
            String bin=BigInteger.valueOf(i).toString(2);
            if(check(bin))
            {
                result+=1;
            }

        }
        return result;
    }


    public static String fillStack(String input)
    {
        StringBuilder inn=new StringBuilder();
        for(int i=0; i<input.length(); i++)
        {
            char c= input.charAt(i);
            if(c!=' ')
            {
                ss.push(c);
                inn.append(c);
            }   
        }
        return inn.toString();
    }

    public static String buildReverse()
    {
        StringBuilder rev=new StringBuilder();

        while(!ss.empty())
        {
            char ch=ss.pop();
            rev.append(ch);
        }

        return rev.toString();
    }

    public static boolean check(String input)
    {
        if(fillStack(input).equalsIgnoreCase(buildReverse()))
            return true;
        else
            return false;
    }

}

当我使用类似(1,1000000)的输入时,需要花费大量时间来计算。所以如何限制

时间。或者我怎样才能提高此代码的效率?

谢谢。

1 个答案:

答案 0 :(得分:2)

首先,它似乎并不想减少编译,而是运行时。其次,如果您只想检查格式化为字符串的数字是否为回文,只需反转已创建的字符串并比较反向和原始字符串。

https://stackoverflow.com/a/7569370/2055163

http://docs.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html#reverse()