小编典典

检查字符串中给定字符出现的编号

java

我想编写一个简单的类来处理字符串(可能是很长的字符串,最多可以包含100万个字符)。字符串基本上由两个可以相互混合的字符“ a”和“
b”组成。如果a的个数等于b的个数,则应用会说可以,否则为NOK。我想知道如何最有效地做到这一点。我考虑过使用正则表达式拆分String,然后计算a和b的出现次数,但也许有人知道更好的方法。对于regex来说还比较陌生,所以请让我知道是否有任何错误。这是我的早期尝试。

public class Typo { 
    public static void main(String[] args){     
        String ver = "";
        int na = 0;
        int nb = 0;
        String regex = ("\\w.+");
        Pattern p = Pattern.compile(regex);
        String text = "ababababbaba";
        if (text.length() == 0){
            ver = "OK";
        }
        else if (text.length() == 1){
            ver = "NOK";
        }
        else if ((text.length() % 2) == 1){
            ver = "NOK";
        }
        else if ((text.length() % 2) == 0){
            //check number of a and b and if it equals return OK otherwise NOK
            Matcher m1 = p.matcher("a");
            while(m1.find()){
                na = na + 1;
            }
            Matcher m2 = p.matcher("b");
            while(m2.find()){
                nb = nb + 1;
            }
            if (na == nb){
                ver = "OK";
            }
            else 
                ver = "NOK";
        }
        System.out.println(ver);
    }

}

阅读 266

收藏
2020-11-30

共1个答案

小编典典

为什么需要正则表达式并为此拆分字符串!您可以简单地遍历字符串并计算a和bs的数量。您需要保留两个不同的计数器,一个代表a,另一个代表b。使用正则表达式会降低效率。如果没有至少遍历字符串一次,就无法获得结果。因此,使用一个简单的循环来计算a和b。

  • 您可以在循环中进行一次优化。如果任何时间的mod of countA - countB大于剩余字符数,则a和b永远不能相等。这样就可以打破循环了。

  • 如果字符串的长度为奇数,则无需计数。当元素总数为奇数时,a和b的计数永远不能相等。

2020-11-30