第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

用不允許出現(xiàn)的次數(shù)替換字符串中的所有連續(xù)重復(fù)項(xiàng)

用不允許出現(xiàn)的次數(shù)替換字符串中的所有連續(xù)重復(fù)項(xiàng)

呼如林 2023-03-31 14:35:31
我需要編寫一個(gè)方法,它將一個(gè)字符串作為參數(shù)并返回一個(gè)新字符串,該字符串是通過用'n'該字符串的一個(gè)實(shí)例替換重復(fù)的相鄰字母的每個(gè)實(shí)例而獲得的。例如,如果"aaabcccd"作為輸入 String 和n =2,它返回"aabccd"。我已經(jīng)嘗試了以下代碼,但沒有得到預(yù)期的輸出String in = "aaadbbb";char[] s = in.toCharArray();int len = s.length;int n = 2;StringBuffer new_s = new StringBuffer("");int count = 1;char prev='\0';for (int i = 0; i < len - 1; i++) {    if (s[i] == s[i + 1]) {       if(count <= n){            new_s.append(s[i]);           count++;        }else{         count=1;       }    } else {        new_s.append(s[i]);    }}   System.out.println(new_s);輸出aaadb -預(yù)期-aadbb
查看完整描述

5 回答

?
慕運(yùn)維8079593

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊

可以使用反向引用通過正則表達(dá)式魔術(shù)來完成。


String in = "aaaaddbbbbc";

int n = 2;

String pattern = String.format("(([a-z])\\2{%d})\\2+", n - 1);

System.out.println(in.replaceAll(pattern, "$1"));

輸出:


ddbbc


解釋:里面的數(shù)字{}是n-1。


([a-z])是一個(gè)捕獲組,匹配從 a 到 z 的任何單個(gè)小寫字母。由于它是表達(dá)式中的第二組括號,因此可以引用為2.


(([a-z])\\2{n})意思是“匹配相同字母的 n+1 次重復(fù)”。它構(gòu)成了第一個(gè)捕獲組,我們將使用它作為替換


\\2+匹配同一字母的所有額外重復(fù)。它們在更換后被丟棄。


查看完整回答
反對 回復(fù) 2023-03-31
?
largeQ

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊

看看這個(gè)解決方案。您應(yīng)該注意輸入字符串中的最后一個(gè)字符,因?yàn)槟坏阶詈笠粋€(gè)字符。


private void replaceConsecutiveDuplicates() {

    String input = "aaadbbb";

    int n = 2;

    StringBuffer sb = new StringBuffer();

    int count = 1;

    char current;


    for( int i = 0; i < input.length(); ++i){

        current = input.charAt(i);

        if (i + 1 < input.length() && current == input.charAt(i + 1)) {

            ++count;

        } else if (count > 1) {

            for(int j = 0; j < n; ++j) {

                sb.append(current);

            }

            count = 1;

        }

        else {

            sb.append(current);

        }

    }

    System.out.println(sb.toString());

}


查看完整回答
反對 回復(fù) 2023-03-31
?
www說

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊

要再添加一個(gè)備選方案:


    String in = "aaadbbbjjkllllllopp";

    int n = 2;

    StringBuilder sb = new StringBuilder();

    char temp = in.charAt(0);

    for(int i = 0; i < in.length()-1;){   // note that the incrementation of i is moved to the while loop

        temp = in.charAt(i);            // save current char in temp variable

        int count = 0;

        while (i < in.length() && in.charAt(i) == temp) {   ///iterate as long as you find same chars or hit the end of the string

            i++;

            count++;

        }

        if (count > n){   // if and only if count is greater than max allowed set it to max allowed

            count = n;

        }

        for(int j = 0; j < count; j++){   // append count chars

            sb.append(temp);

        }

    }

    System.out.println(sb.toString());


查看完整回答
反對 回復(fù) 2023-03-31
?
搖曳的薔薇

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊

  public static String test(String input, int repetitions) {

    String flag = "";

    String replacement = "";

    String output = input;

    ArrayList<Character> prevLetters = new ArrayList<Character>();


    for(int x = 0; x < input.length(); x++) {

        if(!prevLetters.contains(input.charAt(x))) {

            for(int y = 0; y <= repetitions ; y++) {

                flag += String.valueOf(input.charAt(x));

            }

            if(input.contains(flag)) {

                replacement = flag.substring(0, flag.length()-1);

                while(output.contains(flag)){

                    output = output.replace(flag, replacement);

                }

            }

            flag = "";

            prevLetters.add(input.charAt(x));

        }

    }

    return output;

}

這是我的解決方案,它遵循與您類似的想法。然而,與其比較每個(gè)字符值,我認(rèn)為簡單地檢查規(guī)則中的中斷(字符連續(xù)出現(xiàn) n+1 次)并“修復(fù)”它會更容易。


如果您有興趣使用您的方法,我注意到的一個(gè)潛在問題是您沒有在最后一個(gè) else 中將計(jì)數(shù)分配給 1。您也沒有機(jī)會添加最后一個(gè)字符,因?yàn)槟辉谘h(huán)持續(xù)時(shí)間為 len - 1 時(shí)在索引“i”處添加字符。


查看完整回答
反對 回復(fù) 2023-03-31
?
子衿沉夜

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

我認(rèn)為你在正確的軌道上。我不確定這是否是一項(xiàng)作業(yè),所以我不想直接給你答案,但這里有一些可能有用的提示:

  1. 您已經(jīng)在遍歷字符串。這很棒!但是,我認(rèn)為您想將當(dāng)前字符與前一個(gè)字符進(jìn)行比較,而不是下一個(gè)字符。

  2. 您不需要將輸入轉(zhuǎn)換為 char 數(shù)組來迭代它,只需使用charAt(idx)

  3. 您似乎從不使用 prev,但我認(rèn)為您在聲明時(shí)心中有正確的想法!

  4. 將您的問題分為兩部分:何時(shí)更新計(jì)數(shù)和何時(shí)附加字符。您可以在 for 循環(huán)中解決這兩個(gè)問題,但不要嘗試在同一個(gè) if 語句中同時(shí)執(zhí)行這兩個(gè)操作,而是將其分解為多個(gè) if。

要做的三件事是:

  • 更新上一個(gè)值

  • 更新計(jì)數(shù)

  • 更新新字符串

獲得這些的正確順序以及我將留給你的確切實(shí)現(xiàn)(再次,因?yàn)槲也淮_定這是否是一項(xiàng)任務(wù))

更新:由于其他人發(fā)布,這是我的解決方案(使用單個(gè) for 循環(huán)):

private String replaceConsecutiveDuplicates(String input, int n) {

    if (input == null || input.length() < n) return input;

    if (n == 0) return "";


    StringBuffer sb = new StringBuffer();


    int count = 1;

    char prev = input.charAt(0);

    sb.append(prev);


    char current;

    for( int i = 1; i < input.length(); i++) {

        current = input.charAt(i);

        if (prev == current) {

            if (++count > n) continue;

        } else {

            count = 1; 

        }

        prev = current;

        sb.append(current);

    }

    return sb.toString();

}


查看完整回答
反對 回復(fù) 2023-03-31
  • 5 回答
  • 0 關(guān)注
  • 153 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號