先统一为大写,再按连续相同字符分段输出行程长度编码。
OJ: noi_openjudge
题目 ID: ch0107-32
难度:入门
标签:字符串模拟python
日期: 2026-07-30 23:01
题意
对大小写不敏感的字母串做行程长度编码,格式为 (字符,次数)。
思路
先 upper() 使大小写相同的字母合并,再用与 p 型编码相同的连续段扫描,按要求拼出括号格式。
代码
cpp
#include <cstdio>
#include <cstring>
char s[1005];
int main(){
scanf("%s",s+1);
int cnt = 1;
int len = strlen(s+1);
int i;
for (i=1;i<=len+1;i++){
if( s[i] >='a' && s[i] <='z')
s[i] = s[i] +'A'-'a';
}
for (i=2;i<=len+1;i++){
if( s[i] == s[i-1]){
cnt++;
}
else {
printf("(%c,%d)",s[i-1],cnt);
cnt = 1;
}
}
return 0;
}复杂度
总结
Python代码
python
text = input().strip().upper()
parts = []
count = 1
for index in range(1, len(text) + 1):
if index < len(text) and text[index] == text[index - 1]:
count += 1
else:
parts.append(f"({text[index - 1]},{count})")
count = 1
print("".join(parts))C++代码
cpp
#include <cstdio>
#include <cstring>
char s[1005];
int main(){
scanf("%s",s+1);
int cnt = 1;
int len = strlen(s+1);
int i;
for (i=1;i<=len+1;i++){
if( s[i] >='a' && s[i] <='z')
s[i] = s[i] +'A'-'a';
}
for (i=2;i<=len+1;i++){
if( s[i] == s[i-1]){
cnt++;
}
else {
printf("(%c,%d)",s[i-1],cnt);
cnt = 1;
}
}
return 0;
}复杂度
时间复杂度为
总结
先做规范化,再做分段统计,可使“大小写不敏感”不干扰主循环。