使用java語言,將字串中連續重複出現的字母變成“出現次數“+字母的格式

來源:互聯網
上載者:User

標籤:img   預設   blog   計算   append   結束   另一個   注意   har   

 今天在簡書上看到這樣一道有趣的演算法題:

 

解題思路
  • 首先定義一個變數element,預設是字串的第一個字元。以element為基準元素,去判斷某個字元是否重複。然後再去定義一個變數count去記錄重複的次數,初始值應該為1

  • 然後我們去遍曆整個字串,應該從第1號位置的字元開始遍曆。如果當前字元等於element,就說明該字元在當前字串中出現過,已經重複了。那麼count就應該自增。

  • 如果當前字元不等於element,就說明上一個字元連續的重複次數已經計算完畢,可以進行拼接操作。接下來我們就可以操作當前字元了,count還原到初始值1。

  • 遍曆結束時,進行拼接操作。為什麼不在第二步進行拼接操作? 因為當前字元在整個字串中重複的次數還沒有統計完,如果記錄一次重複的次數,就進行拼接的操作的話,肯定不能達到預期效果。假如字串是“ppppp”,如果這樣做了,輸出結果會是"p2p3p4p5"。所以必須要統計完某一個字元的重複次數,才能進行拼接操作。我們只需要計算一個字元連續的重複次數。當我們遍曆某一個字元時,發現它不等於element,就說明它上一個字元重複次數已經統計好,這時候我們才可以進行拼接字串操作。

應該注意的問題
  • 先一般,後特殊。進行邊界控制,我們要去判斷字串是否為null 或者“”,然後去做相應的判斷。

  • 每次必須在前推進迴圈不變式中涉及到的變數值。

  • 比如一個字元a在該字串中出現過1次,那麼應該輸出a,而不是a1

  • 不要使用字串拼接的形式拼接資料,String是不可變對象,每次拼接會產生新的String對象。使用StringBuffer是安全執行緒的,還是可變對象。每次調用append()並不會產生一個新的字串。 

代碼實現:

public class Demo {    public static void main(String[] args) {        encode("wwwbbawabbb");        encode("a");        encode("abcabcccc");        encode("ppppprrrrppp");        encode("");        encode(null);    }    public static void encode(String str) {        if (str == null || str.equals("")) {            System.out.println("");            return;        }        // 利用StringBuffer變數字串接受結果        StringBuffer sb = new StringBuffer();                char element = str.charAt(0);        int count=1;        for(int i=1;i<str.length();i++) {            if(element==str.charAt(i)) {                count++;            }else {                //當讀到另一個不一樣的字元的時候,再拼接之前統計的字元                sb.append(element);                //如果統計數量為1的時候不輸出統計數量                sb.append(count==1 ? "" :count);                element = str.charAt(i);                count=1;            }        }        // 保證當最後一個字元和統計的數量都拼接上        sb.append(element);        sb.append(count==1 ? "" :count);                // 輸出整個結果        System.out.println(sb.toString());    }}

 原文地址:https://www.jianshu.com/p/32756f1ea4e7

使用java語言,將字串中連續重複出現的字母變成“出現次數“+字母的格式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.