问题与解答

问题描述

对给定的一个字符串,找出有重复的字符,并给出其位置。

输入格式

输入包括一个由字母和数字组成的字符串,其长度不超过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次

<数据结构>XDOJ333.找位置的更多相关文章

  1. JOBDU 1199 找位置

    题目1199:找位置 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2645 解决:1286 题目描述: 对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12 ...

  2. string反向找位置,分割字符串(只取文件夹路径)

    1 #include <uf.h> 2 #include <uf_part.h> 3 #include <atlstr.h> 4 #include <iost ...

  3. 【九度OJ】题目1199:找位置 解题报告

    [九度OJ]题目1199:找位置 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1199 题目描述: 对给定的一个字符串,找出有重复的 ...

  4. 九度OJ 1199:找位置 (计数)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2083 解决:1010 题目描述: 对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12 输出:a,1:a,4 ...

  5. JavaScript:正则表达式 前瞻 找位置

    js中全部都是顺序环视 顺序环视匹配过程 对于顺序肯定环视(?=Expression)来说,当子表达式Expression匹配成功时,(?=Expression)匹配成功,并报告(?=Expressi ...

  6. 洛谷 P2894 [USACO08FEB]酒店Hotel-线段树区间合并(判断找位置,不需要维护端点)+分治

    P2894 [USACO08FEB]酒店Hotel 题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultur ...

  7. poj 2828 Buy Tickets 【买票插队找位置 输出最后的位置序列+线段树】

    题目地址:http://poj.org/problem?id=2828 Sample Input 4 0 77 1 51 1 33 2 69 4 0 20523 1 19243 1 3890 0 31 ...

  8. system v和posix的共享内存对比 & 共享内存位置

    参考 http://www.startos.com/linux/tips/2011012822078.html 1)Linux和所有的UNIX操作系统都允许通过共享内存在应用程序之间共享存储空间. 2 ...

  9. ES6 之 Set数据结构和Map数据结构 Iterator和for...of循环

    ECMAScript 6 入门 Set数据结构 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. va ...

随机推荐

  1. Vue 之keep-alive的使用,实现页面缓存

    什么是keep-alive 有时候我们不希望组件被重新渲染影响使用体验: 或者处于性能考虑,避免多次重复渲染降低性能.而是希望组件可以缓存下来,维持当前的状态.这时候就需要用到keep-alive组件 ...

  2. linux添加用户、权限

    # useradd –d /usr/sam -m sam 此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户主目录所在的父目录). 假 ...

  3. PS只能各个工具使用的注意知识点

    1.图章工具  <仿制图章工具>使用方法:按住alt点击吸取干净的地方,然后松开alt键,按住鼠标左键拖动或左击  擦拭 图章区域放大缩小,是按住alt键+鼠标右键左右滑动 当图片中多个图 ...

  4. Linux基础命令---htdigest建立和更新apache服务器摘要

    htdigest htdigest指令用来建立和更新apache服务器用于摘要认证的存放用户认证信息的文件. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.   1.语法   ...

  5. 关于java构造器

    关于java的构造器.首先构造器并不会创建java对象,构造器知识负责执行初始化,在构造器执行之前,Java对象所需要的内存空间是由new关键字申请出来的.大部分时候,程序使用new关键字为一个Jav ...

  6. Can references refer to invalid location in C++?

    在C++中,引用比指针更加的安全,一方面是因为引用咋定义时必须进行初始化,另一方面是引用一旦被初始化就无法使其与其他对象相关联. 但是,在使用引用的地方仍然会有一些例外. (1)Reference t ...

  7. Linux 网卡配置文件,命令详细设置

    1.配置文件/etc/hosts(本地主机ip地址映射,可以有多个别名)./etc/services(端口号与标准服务之间的对应关系)./etc/sysconfig/network(设置主机名,网关, ...

  8. LuoguP7911 [CSP-J 2021] 网络连接 题解

    Content 题目过于难解释,请前往题面查看.以下直接给出本题做法. Solution 入门组 T3 在我印象中向来都不是很容易能做出来的题目,但是今年这个 T3 不得不说还是挺好做的. 我们先不妨 ...

  9. IIS部署,发布网站

    一.IIS部署 1.打开控制面板,选择 '程序' 2.程序和功能下,选择打开或关闭Windows功能 3.等待加载,选择Internet信息服务,勾选如下选项 在弹出的"windows功能& ...

  10. windows下php安装redis扩展

    查看当前PHP版本 代码中添加 phpinfo(); 下载对应的redis扩展 下载链接:https://pecl.php.net/package/redis 因为我的PHP版本是5.6的,所以red ...