pongo - 字符串消除

字符串消除

題目詳情:

給定一個字符串,僅由a,b,c 3種小寫字母組成。當出現連續兩個不同的字母時,你可以用另外一個字母替換它,如


  1. 有ab或ba連續出現,你把它們替換爲字母c;

  2. 有ac或ca連續出現時,你可以把它們替換爲字母b;

  3. 有bc或cb 連續出現時,你可以把它們替換爲字母a。


你可以不斷反覆按照這個規則進行替換,你的目標是使得最終結果所得到的字符串儘可能短,求最終結果的最短長度。


輸入:字符串。長度不超過200,僅由abc三種小寫字母組成。

輸出: 按照上述規則不斷消除替換,所得到的字符串最短的長度。


例如:輸入cab,輸出2。因爲我們可以把它變爲bb或者變爲cc。

         輸入bcab,輸出1。儘管我們可以把它變爲aab -> ac -> b,也可以把它變爲bbb,但因爲前者長度更短,所以輸出1。



public class Main {
  public static int minLength(String s) {
          
        char[] baseArray = {'a', 'b', 'c'};
        char first;
        char second;
          
        while(true) {
            boolean haveDifferent = false;
            for(int i = 0; i < s.length() - 1; i++) {
                first = s.charAt(i);
                second = s.charAt(i+1);
                if(first != second) {
                    haveDifferent = true;
                    String oldStr = first + "" + second;
                    String newStr = "";
                    for(int j = 0; j < baseArray.length;j++) {
                          if(baseArray[j] != first && baseArray[j] != second) {
                              newStr = baseArray[j] + "";
                              break;
                          }
                      }
                    s = s.replace(oldStr, newStr);
                    break;
                }
            }
              
            if(!haveDifferent) {
                break;
            }
        }
          
        char third;
        while(true) {
            boolean haveSame = false;
            for(int i = 0; i < s.length() - 2; i++) {
                first = s.charAt(i);
                second = s.charAt(i+1);
                third = s.charAt(i+2);
                if(first == second && second == third) {
                    haveSame = true;
                    String oldStr = first + "" + second + "" + third;
                    String newStr = first + "";
                    s = s.replace(oldStr, newStr);
                    break;
                }
            }
              
            if(!haveSame) {
                break;
            }
        }
        return s.length();
  }
    
   
  //start 提示:自動閱卷起始唯一標識,請勿刪除或增加。
    public static void main(String args[])
    {
        String s = "cab";
        System.out.println("String " +s + " , length : " + minLength(s));
        s = "bcab";
        System.out.println("String " +s + " , length : " + minLength(s));
        s = "cabb";
        System.out.println("String " +s + " , length : " + minLength(s));
         s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
        System.out.println("String " +s + " , length : " + minLength(s));
    }
    //end //提示:自動閱卷結束唯一標識,請勿刪除或增加。
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章