【華為OD】機試真題 - 分割均衡字串-2024年D卷

Hy旧人伤發表於2024-06-28

題目描述
均衡串定義:字串中只包含兩種字元,且這兩種字元的個數相同。
給定一個均衡字串,請給出可分割成新的均衡子串的最大個數。
約定:字串中只包含大寫的 X 和 Y 兩種字元。
輸入描述
輸入一個均衡串

  • 字串的長度:[2,10000]。
  • 給定的字串均為均衡字串

輸出描述
輸出可分割成新的均衡子串的最大個數。
備註
分割後的子串,是原字串的連續子串。
用例

輸入:	XXYYXY
輸出:	2
說明:	XXYYXY可以分割成2個均衡子串,分別為XXYY、XY

Java 解法:

import java.util.Scanner;

public class BalancedStringSplitter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        int result = balancedStringSplit(s);
        System.out.println(result);
    }

    public static int balancedStringSplit(String s) {
        int count = 0;
        int balance = 0;

        for (char c : s.toCharArray()) {
            if (c == 'X') {
                balance++;
            } else if (c == 'Y') {
                balance--;
            }

            if (balance == 0) {
                count++;
            }
        }

        return count;
    }
}

Python 解法:

def balancedStringSplit(s):
    count = 0
    balance = 0

    for c in s:
        if c == 'X':
            balance += 1
        elif c == 'Y':
            balance -= 1

        if balance == 0:
            count += 1

    return count

if __name__ == "__main__":
    s = input("請輸入一個均衡字串: ")
    result = balancedStringSplit(s)
    print(result)

C++ 解法:

#include <iostream>
#include <string>

int balancedStringSplit(const std::string& s) {
    int count = 0;
    int balance = 0;

    for (char c : s) {
        if (c == 'X') {
            balance++;
        } else if (c == 'Y') {
            balance--;
        }

        if (balance == 0) {
            count++;
        }
    }

    return count;
}

int main() {
    std::string s;
    std::cout << "請輸入一個均衡字串: ";
    std::cin >> s;

    int result = balancedStringSplit(s);
    std::cout << result << std::endl;

    return 0;
}

+++==========================================================+++
以上內容均為個人學習記錄使用。
牛客網原題連結:https://www.nowcoder.com/discuss/633634580129447936?sourceSSR=search

相關文章