<数据结构>XDOJ333.找位置
2024-09-08 07:23:46
问题与解答
问题描述
对给定的一个字符串,找出有重复的字符,并给出其位置。
输入格式
输入包括一个由字母和数字组成的字符串,其长度不超过100。
输出格式
可能有多组测试数据,对于每组数据,
按照样例输出的格式将字符出现的位置标出。
1、下标从0开始。
2、相同的字母在一行表示出其出现过的位置。
样例输入
abcaaAB12ab12
样例输出
a:0,a:3,a:4,a:9
b:1,b:10
1:7,1:11
2:8,2:12
样例说明
给定字符串中重复的字母有a,b,1,2,依次输出上述每个字母在字符串中的全部位置。
//找位置
//hash表+拉链法
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
struct Node{
char element;
int positon;
};
vector<Node> Hash[125];
//hash表,拉链法处理冲突(实现类似图的邻接矩阵)
//hash函数为直接定址:每个字符c对应的ASCII码,大小写字母的ASCII不超过125
//hash表的每个元素是一个变长数组(vector),vector中存储结点Node(包含字符c以及对应的下标位置position)
bool Vis[125] = {false};
//标记数组:Vis[i] = true 表示在哈希表中映射为i的值已经被打印过,无需再打印
void FindPostion(char* s); //找位置并按照题目要求输出
void InsertElement(char c, int position); //将字符串中的字符插入hash表
int main(){
char s[100];
while(scanf("%s", s) != EOF){ //多点输入
FindPostion(s);
}
}
void FindPostion(char *s){
int i,j,index,size;
int length = strlen(s);
for(i = 0; i < length; i++) //将字符串s中的每个字符插入hash表
InsertElement(s[i], i);
for(i = 0; i < length; i++){
index = s[i] - '0'; //直接定址:得到当前字符s[i]在hash表中的位置
size = Hash[index].size(); //存储当前字符s[i]的变长数组的大小
if(size > 1 && Vis[index] == false){ //size>1说明有s[i]有重复,Vis[]数组防止多次打印结果
Vis[index] = true; //标记,防止多次打印结果
for(j = 0; j < size; j++){ //遍历vector[index],打印结果
if(j == size-1)
printf("%c:%d", Hash[index][j].element, Hash[index][j].positon);
else
printf("%c:%d,", Hash[index][j].element, Hash[index][j].positon);
}
printf("\n");
}
}
}
void InsertElement(char c, int position){ //将字符c及其所在的位置存入hash表中
Node n;
n.element = c;
n.positon = position;
int index = c -'0'; //直接定址:得到当前字符s[i]在hash表中的位置
Hash[index].push_back(n); //插入
}
题后反思:调试记录
打印顺序错误
- 改动前:遍历hash表中的每个vector,如果
Hash[i].size()>1
,则打印结果。 - 问题:
- 结果按照字符在hash表中的顺序打印而不是在字符串中的顺序打印;
hash[i].size>1
判断125次
- 改动后:
- 按照原顺序输出
hash[i].size>1
判断次数等于字符串长度
多次打印
未加入Vis[]数组时,如果字符'a'在字符串中出现n次,那么'a'的相关结果就会打印n次
最新文章
- Spring3整合Hibernate4-我们到底能走多远系列(30)
- WPF/Silverlight Layout 系统概述——Measure(转)
- CoffeeScript学习(3)—— 函数
- IOS 如何选择delegate、notification、KVO?(转)
- hdu 1021 Fibonacci Again(找规律)
- Java HexString
- PHPMailer发匿名邮件及Extension missing: openssl的解决
- [APUE]进程控制(中)
- 《JAVASCRIPT高级程序设计》事件处理程序和事件类型
- BZOJ 3680: 吊打XXX【模拟退火算法裸题学习,爬山算法学习】
- 聊聊并发(一)深入分析Volatile的实现原理
- 不要使用jQuery触发原生事件
- QC API全系列揭秘之Test Execution操作(全网首发)
- word2vec训练&;IC分词(待)
- 第三个sprint冲刺第三阶段
- jvm运行机制和volatile关键字详解
- ElasticSearch 5.4 自定义插件
- 枚举enum和enumerate
- 超详细的Java面试题总结(二)之Java基础知识篇
- Python框架之Tornado(请求阶段)