JOBDU 1199 找位置
2024-10-01 03:19:36
题目1199:找位置
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:2645
解决:1286
- 题目描述:
-
对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12
输出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。
- 输入:
-
输入包括一个由字母和数字组成的字符串,其长度不超过100。
- 输出:
-
可能有多组测试数据,对于每组数据,
按照样例输出的格式将字符出现的位置标出。
- 样例输入:
-
abcaaAB12ab12
- 样例输出:
-
a:0,a:3,a:4,a:9
b:1,b:10
1:7,1:11
2:8,2:12
- 提示:
-
1、下标从0开始。
2、相同的字母在一行表示出其出现过的位置。
不想多说,考试时没时间来想,我用了三个数组,一个用来存字母的位置,一个用来存字母出现的次数,一个是用来在输出时判断是否在前面已经输出过该字母位置(做标记的)
#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
#include<cstring>
using namespace std;
int main()
{
char str[];
while(~scanf("%s",str))
{
int a[][],b[],p=,flag[];
memset(b,,sizeof(b));
memset(flag,,sizeof(flag));
for(int i=;i<strlen(str);i++)
{
a[str[i]-''][b[str[i]-'']++] = i;//a数组记录字母每次出现的位置,b数组记录出现过的次数
}
for(int i=;i<strlen(str);i++)
{
if(b[str[i]-'']>=&&flag[str[i]-'']==)
{
flag[str[i]-'']=;//此时该字母的位置已经输出,标记数组记为1,下次不会再进入此循环
for(int j=;j<b[str[i]-''];j++)
{
if(j!=b[str[i]-'']-)
printf("%c:%d,",str[i],a[str[i]-''][j]);
else printf("%c:%d\n",str[i],a[str[i]-''][j]);
}
}
}
}
return ;
}
最新文章
- Android客户端token简介和简单应用
- vs2010中的快捷键
- 九度OJ 1056--最大公约数 1439--Least Common Multiple 【辗转相除法】
- java程序员入门:英语好不好对编程到底有没有影响
- Rxjava学习小记
- 用正则表达式(regex)匹配多项式(polynomial)
- python+selenium自动化测试_1
- python 爬取可用
- Vivado中VIO核使用
- Hibernate中get()和load()方法区别
- POJ 1679 The Unique MST (次小生成树kruskal算法)
- screen.height &;&; screen.width
- lua工具库penlight--09技术选择
- Java-工程中常用的程序片段
- leetcode 31. Next Permutation JAVA
- 【bzoj2073】[POI2004]PRZ 状态压缩dp
- SpringBoot | 第三十一章:MongoDB的集成和使用
- vue项目中引入element-ui时,如何更改主题色
- IAT Hook
- poj 3278 Catch That Cow-搜索进阶-暑假集训