华为OD机试 - 分割均衡字符串(Java & JS & Python & C & C++)
题目描述:
给定一个字符串s,请按下述要求进行处理:
- 将字符串s进行分割,使每个子字符串的每个字符都是相同的。
- 在满足上述要求的情况下,分割的子字符串数量最小。
- 输出满足条件的最小分割数量。
输入描述:
输入一个字符串s,s的长度不超过100,且只包含小写字母。
输出描述:
输出满足条件的最小分割数量。
示例:
输入:"aabab"
输出:2
说明:可以分割为 "aa" 和 "ab"。
解决方案:
// Java代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
System.out.println(solve(s));
}
public static int solve(String s) {
int count = 0;
char prev = s.charAt(0);
for (int i = 1; i < s.length(); i++) {
if (s.charAt(i) != prev) {
count++;
prev = s.charAt(i);
}
}
return count + 1;
}
}
// JavaScript代码
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function(line) {
console.log(solve(line));
});
function solve(s) {
let count = 0;
let prev = s[0];
for (let i = 1; i < s.length; i++) {
if (s[i] !== prev) {
count++;
prev = s[i];
}
}
return count + 1;
}
# Python代码
def solve(s):
count = 0
prev = s[0]
for i in range(1, len(s)):
if s[i] != prev:
count += 1
prev = s[i]
return count + 1
s = input()
print(solve(s))
// C代码
#include <stdio.h>
#include <string.h>
int solve(char *s) {
int count = 0;
char prev = s[0];
for (int i = 1; i < strlen(s); i++) {
if (s[i] != prev) {
count++;
prev = s[i];
}
}
return count + 1;
}
int main() {
char s[101];
gets(s);
printf("%d\n", solve(s));
return 0;
}
// C++代码
#include <iostream>
#include <string>
using namespace std;
int solve(string s) {
int count = 0;
char prev = s[0];
for (int i = 1; i < s.length(); i++) {
if (s[i] != prev) {
count++;
prev = s[i];
}
}
return count + 1;
}
int main() {
string s;
getline(cin, s);
cout << solve(s) << endl;
return 0;
}
这些代码实例展示了如何接收用户输入的字符串,然后通过遍历字符串并比较相邻字符来找出需要的分割数量,最后输出这个分割数量。这些解决方案都遵循了题目的要求,并且都使用了
评论已关闭