查找兄弟单词

/******************************************************************************

  Copyright (C), 2001-2012, Huawei Tech. Co., Ltd.

 ******************************************************************************
  File Name     : FindSimilarWord.cpp
  Version       :
  Author        :
  Created       : 2012/09
  Last Modified :
  Description   :
  Function List :

  History       :
  1.Date        : 2012/09
    Author      :
    Modification: Created file

******************************************************************************/

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

map<string, string> g_SubMap;
/******************************************************************************
原    型:int AddOneWord (char* Word);
功    能:在字典中增加一个单词
输入参数:
          Word 单词字符串,调用者保证Word指针不为空,指向的是合法单词
输出参数:
          无
返回值:
        -1 失败(单词在字典中已存在等情况)
        0  成功
********************************************************************************/
int AddOneWord (char* Word)
{
    /* 在这里实现功能 */
	if (NULL == Word)
	{
		return -1;
	}
	string sAddWord =Word;
	map<string, string>::iterator itr = g_SubMap.find(sAddWord);
	if (g_SubMap.end() != itr)
	{
		return -1;
	}
	string sAddWordSub = Word;
	sort(sAddWordSub.begin(), sAddWordSub.end());
	g_SubMap.insert(make_pair(sAddWord, sAddWordSub));

    return 0;
}

/******************************************************************************
原    型:int FindSimilarWordNum (char* Word);
功    能:查找指定单词在字典中的兄弟单词个数
输入参数:
          Word 指定单词字符串,调用者保证Word指针不为空,指向的是合法单词
输出参数:
          无
返回值:
          返回指定单词在字典中的兄弟单词总个数。如果不存在兄弟单词,返回0
*******************************************************************************/
int FindSimilarWordNum (char* Word)
{

    /* 在这里实现功能 */
	if (NULL == Word)
	{
		return 0;
	}
	string sTemp = Word;
	string sSub = Word;
	sort(sSub.begin(), sSub.end());
	int count = 0;
	for (map<string, string>::iterator itr = g_SubMap.begin(); itr != g_SubMap.end(); ++itr)
	{
		if (itr->second == sSub && itr->first != sTemp)
		{
			count++;
		}
	}

    return count;
}

/******************************************************************************
原    型:int FindOneSimilarWord (char* Word, int Seq, char* SimilarWord);
功    能:查找指定单词的指定序号的兄弟单词,指定序号指字典中兄弟单词按字典顺序
          排序后的序号(从1开始)
输入参数:
          Word 指定单词字符串,调用者保证Word指针不为空,指向的是合法单词
          Seq 指定序号(大于等于1)
输出参数:
          SimilarWord 返回兄弟单词字符串,指针不为空,指向的内存由调用者预先分配,
          占51个字节长度,输出的兄弟单词必须紧跟’\0’结束。如果不存在指定序号的
          兄弟单词,输出空串。
返回值:
          -1 失败(如果不存在指定序号的兄弟单词,返回失败)
          0  成功
*******************************************************************************/
int FindOneSimilarWord (char* Word, int Seq, char* SimilarWord)
{
    /* 在这里实现功能 */
	if (NULL == Word || NULL == SimilarWord || 0 >= Seq)
	{
		return -1;
	}
	int count =0;
	string sTemp = Word;
	string sSub = Word;
	sort(sSub.begin(), sSub.end());

	for (map<string, string>::iterator itr = g_SubMap.begin(); itr != g_SubMap.end(); ++itr)
	{
		if (itr->second == sSub && itr->first != sTemp)
		{
			count++;
			if (Seq == count)
			{
				strncpy(SimilarWord, (itr->first).c_str(), (itr->first).length());
				return 0;
			}
		}
	}
	SimilarWord[0] = '\0';
    return -1;
}

/******************************************************************************
原    型:void ClearAllWords(void);
功    能:清空字典中所有单词
输入参数:
          无
输出参数:
          无
返回值:
          无

*******************************************************************************/
void ClearAllWords(void)
{
    /* 在这里实现功能 */
	g_SubMap.clear();
}

int main()
{
	char *Test_Word[7] = {
		"mock",
		"aabc",
		"abc",
		"ckom",
		"bcaa",
		"abca",};

	AddOneWord(Test_Word[0]);
	AddOneWord(Test_Word[1]);
	AddOneWord(Test_Word[2]);
	AddOneWord(Test_Word[3]);
	AddOneWord(Test_Word[4]);
	AddOneWord(Test_Word[5]);

	int Expectnumber = 1;
	int ActualNumber;
	int Ret;

	ActualNumber = FindSimilarWordNum (Test_Word[0]);

	char *ExpectWord = {"bcaa"};
	char SimilarWord[51] = {'\0'};
	int Seq = 2;
	Ret = FindOneSimilarWord (Test_Word[1], Seq, SimilarWord);
	return 0;
}

时间: 2024-10-14 03:42:29

查找兄弟单词的相关文章

【华为OJ】【073-查找兄弟单词】

[华为OJ][算法总篇章] [华为OJ][073-查找兄弟单词] [工程下载] 题目描述 输入描述 先输入字典中单词的个数,再输入n个单词作为字典单词. 输入一个单词,查找其在字典中兄弟单词的个数 再输入数字n 输出描述 根据输入,输出查找到的兄弟单词的个数 输入例子 3 abc bca cab abc 1 输出例子 2 bca 算法实现 import java.util.*; /** * Author: 王俊超 * Date: 2016-01-05 14:49 * All Rights Res

jQuery学习笔记之过滤器三(向上查找兄弟元素、向下查找兄弟元素)

向上查找兄弟元素的方法:prev方法.prevAll方法.prevUntil方法 向下查找兄弟元素:next方法.nextAll方法.nextUntil方法 向上查找兄弟元素 1.prev方法 2.prevAll方法 3.prevUntil方法 向下查找兄弟元素 1.next方法 2.nextAll方法 3.nextUntil方法 jQuery学习笔记之过滤器三(向上查找兄弟元素.向下查找兄弟元素)

[算法]判断兄弟单词

一个单词单词字母交换,可得另一个单词,如army->mary,成为兄弟单词.提供一个单词,在字典中找到它的兄弟.描述数据结构和查询过程. #include <iostream> #include <string> #include <cstring> using namespace std; void add(unsigned int count[],char c){ if(c <= 'Z'){ ++count[c - 'A']; } else{ ++cou

jQuery使用(四):DOM操作之查找兄弟元素和父级元素

查找兄弟元素 向下查找兄弟元素 next() nextAll() nextUntil() 向上查找兄弟元素 prev() prevAll() prevUntil() 查找所有兄弟元素 siblings()  1.1.1.next()方法用来查找下一个兄弟元素,可以传参也可以不传参.参数可以是任意jQuery选择器,表示如果下一个元素如果是指定的元素就选定.当没有选中指定的元素时,jQuery链式调用还是保持原来的jQuery对象. <!-- next --> <button>点我&

查找兄弟元素 previousSibling nextSibling

示例 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>查找兄弟元素</title> 5 <meta charset="UTF-8"> 6 <!--<meta name="viewport" content="width=device-width, initial-scale=1.0"> --> 7 <me

previousElementSibling ,previousSibling,nextElementSibling ,nextSibling 查找兄弟节点

previousElementSibling ,previousSibling查找本节点的上一个兄弟节点 nextElementSibling ,nextSibling 查找本节点的下一个兄弟节点 var pre=e.previousElementSibling || e.previousSibling; var next=e.nextElementSibling || e.nextSibling;

兄弟单词

1 #include<iostream> 2 #include<string> 3 #include<vector> 4 #include<algorithm> 5 using namespace std; 6 bool isbrother(string str1, string str2) 7 { 8 if (str1.size() == str2.size()) 9 { 10 for (int i = 0; i<str1.size(); i++)

python第八题 查找敏感单词

有一个问题: txt中只能是英文  只要是出现中文 就有问题 报错 ,肯定是编码的问题,但是这个问题我没有找到原因  之后再研究 敏感词文本文件 filtered_words.txt,里面的内容为以下内容,当用户输入敏感词语时,则打印出 Freedom,否则打印出 Human Rights. 代码: def filterwords(): words = [] f = open('G://python文件//filtered_words.txt', 'rb') for l in f.readlin

一些数据结构的思想(2)

1000瓶水中找 出有毒的那瓶,毒性一周后发作,一周内最少需要多少只老鼠 这个题是对bit位的应用,1000接近1024,所以需要10个bit位,对瓶子进行编号,从0到999,这样需要10只老鼠.瓶子的编号分别为: 00000,00000 00000,00001 00000,00010 00000,00011 00000,00101 00000,00111 ...... 11111,00111 同时给老鼠编号,从1,2,...10,从低位开始,让第n个老鼠喝下第n个bit位为1瓶子中的药水.一周