MAP 电话号码

Map 电话号码

个人信息:就读于燕大本科软件工程专业 目前大三;

本人博客:google搜索“cqs_2012”即可;

个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献;

编程语言:C++ ;

编程坏境:Windows 7 专业版 x64;

编程工具:vs2008;

制图工具:office 2010 powerpoint;

硬件信息:7G-3 笔记本;

真言

今天做了一个题,用map可以很好解决的小题,被我弄了整整三个小时,真想骂自己就是一个废物,太水了。

问题

百炼:id 1002

方便记忆的电话号码

英文字母(除Q和Z外)和电话号码存在着对应关系,如下所示:

A,B,C -> 2

D,E,F -> 3

G,H,I -> 4

J,K,L -> 5

M,N,O -> 6

P,R,S -> 7

T,U,V -> 8

W,X,Y -> 9

标准的电话号码格式是xxx-xxxx,其中x表示0-9中的一个数字。有时为了方便记忆电话号码,我们会将电话号码的数字转变为英文字母,如把263-7422记成America。有时,我们还加上“-”作为分隔符,如把449-6753记成Hi-World。当然,我们未必要将所有的数字都转变为字母,比如474-6635可以记成iPhone-5。

总之,一个方便记忆的电话号码由数字和除Q、Z外的英文字母组成,并且可以在任意位置插入任意多的“-”符号。

现在 ,我们有一个列表,记录着许多方便记忆的电话号码。不同的方便记忆的电话号码可能对应相同的标准号码,你的任务就是找出它们。

输入
第一行是一个正整数n(n <= 100000),表示列表中的电话号码数。

其后n行,每行是一个方便记忆的电话号码,它由数字和除Q、Z外的英文字母、“-”符号组成,其中数字和字母的总数一定为7,字符串总长度不超过200。

输出
输出包括若干行,每行包括一个标准电话号码(xxx-xxxx)以及它重复出现的次数k(k >= 2),中间用空格分隔。输出的标准电话号码需按照升序排序。

如果没有重复出现的标准电话号码,则输出一行“No duplicates.”。 

思路

用map解决,键值对应的问题,这类型题真长教训了,自己真菜,三个小时干点啥不好。

代码

#include<iostream>
#include<string>
#include<map>
using namespace std;

string Change(string a,char* hashtable);

int main()
{
	string a;
	int n;

	bool find = false;
	map<string,int> word;
	map<string,int>::iterator it;
	int num;

	char hashtable[] = {'0','1','2','3','4','5','6','7','8','9',
		'*','*','*','*','*','*','*',
		'2','2','2','3','3','3','4','4','4','5','5','5','6','6','6','7',
		'*',
		'7','7','8','8','8','9','9','9'};

	cin>>n;
	while(n>0)
	{
		cin>>a;
		a = Change(a,hashtable);
		num = word.count(a);
		if(num == 0)
			word.insert(map<string,int>::value_type(a,1));
		else
		{
			it = word.find(a);
			(it->second) ++;
		}
		n--;
	}
	for(it = word.begin();it != word.end();it++)
	{
		if(it->second > 1)
		{
			find = true;
			cout<<it->first.substr(0,3)<<"-"<<it->first.substr(3,4)<<" "<<it->second<<endl;
		}
	}

	if(find == false)
		cout<<"No duplicates."<<endl; 

	return 0;
}

string Change(string a,char* hashtable)
{
	string result="";

	for(int i=0;i<a.length();i++)
	{
		if(a[i] != '-')
			result += hashtable[a[i]-'0'];
	}

	return result;
}

MAP 电话号码

时间: 2024-10-23 03:05:53

MAP 电话号码的相关文章

STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)

向量(vector) <vector> 连续存储的元素<vector> Vector<int>c; c.back() 传回最后一个数据,不检查这个数据是否存在. c.clear() 移除容器中所有数据. c.empty() 判断容器是否为空. c.front() 传回地一个数据. c.pop_back() 删除最后一个数据. c.push_back(elem) 在尾部加入一个数据. c[i] 等同于 c.at(i); 列表(list) <list> 由节点组

lintcode 中等题:Letter Combinations of a Phone Number 电话号码的字母组合

题目 电话号码的字母组合 给一个数字字符串,每个数字代表一个字母,请返回其所有可能的字母组合. 下图的手机按键图,就表示了每个数字可以代表的字母. 样例 给定 "23" 返回 ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"] 注意 以上的答案是按照词

词典的实现(1)--Map的底层实现

1,词典是这样的一种数据结构:它能根据给定的键(索引值,key)来查找其对应的值(value)是否存在,在JAVA中主要由java.util.HashMap来完成该功能.如电话本就像一部词典,其中名字作为键,电话号码作为值.本系列文章自己编程实现了Map这一数据结构,模拟实现了电话本的功能. 2,ADT词典接口DictionaryInterface.java的定义 词典接口定义了该词典所具有的基本功能,如添加元素.查询元素……这样,具体的实现类通过implements该接口完成具体的电话本功能的

LeetCode 17 Letter Combinations of a Phone Number (电话号码字符组合)

题目链接 https://leetcode.com/problems/letter-combinations-of-a-phone-number/?tab=Description HashMap<Character, String> map = new HashMap<>(); map.put('0', "0"); map.put('1', "1"); map.put('2', "abc"); map.put('3', &

【LeetCode-面试算法经典-Java实现】【017-Letter Combinations of a Phone Number (电话号码上的单词组合)】

[017-Letter Combinations of a Phone Number (电话号码上的单词组合)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given a digit string, return all possible letter combinations that the number could represent. A mapping of digit to letters (just like on the telephone bu

map集合框架

先简单介绍HashMap这个类 import java.util.HashMap ; import java.util.Map ; public class HashMapDemo01{ public static void main(String args[]){ Map<String,String> map = null; // 声明Map对象,其中key和value的类型为String map = new HashMap<String,String>() ; map.put(

[ZZ] STL 整理(map、set、vector、list、stack、queue、deque、priority_queue) .

转自深秋的落叶 向量(vector) <vector> 连续存储的元素<vector> Vector<int>c; c.back()    传回最后一个数据,不检查这个数据是否存在. c.clear()     移除容器中所有数据. c.empty()   判断容器是否为空. c.front()     传回地一个数据. c.pop_back() 删除最后一个数据. c.push_back(elem)  在尾部加入一个数据. c[i] 等同于 c.at(i); 列表(l

C++关联容器之map

1.map简介 map中的元素是关键字-值对:关键字起到索引的作用,值表示与索引相关的数据.我们常用的字典就是很好的map的实例,单词作为索引,其中文含义代表其值.map类型通常被称为关联数组,其和数组很相似,只不过其下标不是整数而是关键 字,我们通过关键字来查找值而不是位置.比如电话簿也是一个map的例子,姓名作为关键字其对应的值就为该人的电话号码.map类型定义在头文件map中. 注意:map是有序的且不允许重复关键字的关联容器!其有序的实现是依靠关键字类型中的"<"来实现的

字符串专题:map POJ 1002

第一次用到是在‘校内赛总结’扫地那道题里面,大同小异 map<string,int>str 可以专用做做字符串的匹配之类的处理 string donser; str [donser]++ 自动存donser到map并且值加一,如果发现重复元素不新建直接加一, map第一个参数是key,默认字典序升序排列key map<string,int>::iterator ii;         map的迭代器 for(ii=outputer.begin();ii!=outputer.end(