使用java比较字符串的替换字符的最快方法是什么?

时间:2015-03-22 10:22:08

标签: java string performance character

有多个字符串从标准输入传递给此程序。第一个int输入T​​,是传递给该程序的测试用例(字符串)的数量。具有不同替代字符的字符串是完美的。如果备用字符相同,则需要删除这两个字符中的1个。基本上,您需要计算,需要删除多少个字符才能获得完美的字符串?例如:ABABAB是完美的,而AABABAA并不完美。你需要删除2个A,第一个和最后一个。在AAAA中,你需要删除3个A来获得一个完美的字符串。字符串输入可能非常大。计算此类删除次数的最快方法是什么?我写的下面的代码工作得很慢。

public static void main(String[] args) {
    Scanner scan = new Scanner (System.in);
    int T= scan.nextInt();
    String str;
    int count=0;
    for(int i=0; i<T; i++){
        str=scan.next();
        for(int j=0; j<str.length()-1; j++){
            if(str.charAt(j)!=str.charAt(j+1)){
                j+=2;
            }
            else{
                count++;
            }
        }
        System.out.println(count);
    }
}

2 个答案:

答案 0 :(得分:1)

在您担心性能之前,请先担心您的解决方案是否正确。对于输入ABAAB,您的程序返回0,但必须删除1 A才能获得完美的字符串。

然后:你是什么意思&#34;非常大&#34;。这是多少个字符?什么是#34;非常慢&#34;?

你必须至少查看一次字符串的每个字符,这样你就不会快得多。但是,您可以优化一下。目前,您可能会查看单个字符两次(一次在str.charAt(j+1)中,并在str.charAt(j)的下一次迭代中)。当然可以编写算法,使字符串的每个字符都只访问一次。但同样,在关注速度之前,你应该专注于正确性。

答案 1 :(得分:0)

在消除所有逻辑错误后,这是我的工作代码。对于某些测试用例,其执行时间最长为0.45-0.50秒。它的性能能提高吗?

public static void main(String[] args) {
    int T=0; String str;
    Scanner sc = new Scanner(System.in);
    T=sc.nextInt();
    for(int i=0; i<T; i++){
       str= sc.next();
       solve(str);
    }
}
public static void solve(String str){
    char first, second; int count=0;
    for(int i=0; i<str.length()-1; i++){
       first= str.charAt(i);
       second= str.charAt(i+1);
       if(first==second){
           count++;
       }
    }
    System.out.println(count);
}