簡體   English   中英

計算aaa在具有和重疊的字符串中出現的次數

[英]count number of times aaa appears in a string with and with overlaping

計算aaa在字符串中出現的次數:1。不重復; 2。允許重復。 我嘗試了下面的代碼,它在第一種情況下效果很好,但在第二種情況下效果不好。

public static void main(String[] args) {
    String str="cbaadaaabefaaaag";
    int count=0,count1=0;
    for(int i=0;i<str.length();i++)
    {
        if(str.charAt(i)=='a' && str.charAt(i+1)=='a' && str.charAt(i+2)=='a')
        {
            count++;
        }
    }
    System.out.println(count);
    for(int i=0;i<str.length();i++)
    {
        if(i==0)
        {
            if(str.charAt(i)=='a' && str.charAt(i+1)=='a' && str.charAt(i+2)=='a')
            {
                count1++;
            }
        }
        else
        {
            if(str.charAt(i-1)=='a' && str.charAt(i)=='a' && str.charAt(i+1)=='a')
            {
                count1++;
            }
        }
    }
    System.out.println(count1);

}

我試圖輸入是cbaadaaabefaaaag這應該給3為第一殼體和2第二情況下,也當輸入為aaaa它應該是為1的情況下第一和2 overlaping情況。

此代碼應幫助您:

public static void main(String args[]) throws Exception {

    String str = "cbaadaaabefaaaaaaag";
    System.out.println(count(str, true));
    System.out.println(count(str, false));

}

public static int count(String str, boolean overlap) {

    int count = 0;

    for (int i = 0; i < str.length() - 2; i++) {
        if (str.charAt(i) == 'a' && str.charAt(i + 1) == 'a'
                && str.charAt(i + 2) == 'a') {
            if (!overlap) {
                i += 2;
            }
            count++;
        }
    }

    return count;

}

條件i < str.length() - 2確保您不會收到StringIndexOutOfBoundsException ,因為如果字符串中只剩下兩個字符,則不會有另一個子字符串aaa

重疊條件將兩個加到當前索引中,在該位置找到了子字符串aaa ,因此索引指向最后找到的序列aaa之后的下一個字符,這防止了重疊。

public static void main(String[] args) {

    Scanner scn = new Scanner(System.in);

    String str = scn.nextLine();

    int count = 0, count1 = 0;

    for (int i = 0; i < str.length() - 2; i++) {

        if (str.charAt(i) == 'a' && str.charAt(i + 1) == 'a' && str.charAt(i + 2) == 'a') {

            count++;

        }

    }

    System.out.println(count);

    for (int i = 0; i <= str.length() -1; i++) {
        if (str.charAt(i) == 'a' && str.charAt(i + 1) == 'a' && str.charAt(i + 2) == 'a') {
            i += 2;
            count1++;

        }

    }
    System.out.println(count1);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM