連接:https://www.nowcoder.com/questionTerminal/a26c93faf2114176bcf6768a5f162926
來源:牛客網
牛牛喜歡字符串,可是他討厭醜陋的字符串。對於牛牛來講,一個字符串的醜陋值是字符串中相同連續字符對的個數。好比字符串「ABABAABBB」的醜陋值是3,由於有一對"AA"和兩對重疊的"BB"。如今給出一個字符串,字符串中包含字符'A'、'B'和'?'。牛牛如今能夠把字符串中的問號改成'A'或者'B'。牛牛如今想讓字符串的醜陋值最小,但願你能幫幫他。java
輸入描述:spa
輸入包括一個字符串s,字符串長度length(1 ≤ length ≤ 50),字符串只包含'A','B','?'三種字符。
輸出描述:code
輸出一個整數,表示最小的醜陋值
示例1字符串
A?A
0
解題思路:先計算除?外相鄰字符相同的個數num1,再一次處理每組?,若是其中一側延伸到了盡頭,則num2=0,不然,若是包含偶數個?,兩端相同則num=1,不一樣則num2=0,若是包含奇數個?,兩端相同則num=0,不一樣則num2=1。get
package BiShiTi; import java.util.Scanner; public class m_0010 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str = scan.nextLine(); int uglyNum = getUglyNum(str); System.out.println(uglyNum); } static int getUglyNum(String str){ int strLen = str.length(); int uglyNum = 0; // 先處理除?外的字符 for (int i = 0; i < strLen-1; i++) { if (str.charAt(i) == '?') { continue; } if (str.charAt(i) == str.charAt(i+1)) { uglyNum += 1; } } // 再處理? for (int i = 1; i < strLen-1; i++) { if (str.charAt(i) == '?') { // 計算連續?的個數 int left = i - 1; int right = i + 1; while (left >= 0) { if (str.charAt(left) == '?') { left -= 1; continue; }else{ break; } } while (right < strLen) { if (str.charAt(right) == '?') { right += 1; continue; }else{ break; } } i = right - 1; if (left == -1 || right == strLen) { // 若是其中一側的?延伸到了盡頭 uglyNum += 0; }else if ((right-left-1) % 2 == 0) {// 若是存在偶數個? if (str.charAt(left) == str.charAt(right)) { uglyNum += 1; }else { uglyNum += 0; } }else {// 若是存在奇數個? if (str.charAt(left) == str.charAt(right)) { uglyNum += 0; }else { uglyNum += 1; } } } } return uglyNum; } }