`

算法题: 打印含有相同字符的数组

阅读更多

Write a function that takes as input list of words and prints out groups of words with exactly the same letters, one group per line.

For example,

Given the list:
hat, top, potter, pot, pier, ripe

It would print:
hat
top, pot
potter,
pier, ripe

Since ‘pier’ and ‘ripe’ each have one p, i, e, and r they belong on the same line. Since no other word has the same 6 letters as ‘potter’ it belongs on a line by itself.

Note: The order of the lines does not matter. As long as all words that belong on the same line are grouped together the function is correct.

Please use the following function signature:

void PrintGroupsWithSameLetters(string[] words)

 

http://www.iteye.com/topic/1120051

 

分享到:
评论
2 楼 greatwqs 2012-02-03  
static void PrintGroupsWithSameLetters( String[] words )
    {
        Map map = new LinkedHashMap();
        for( String word : words )
        {
            char[] charArray = word.toCharArray();
            Arrays.sort( charArray );
            String key = String.valueOf( charArray );
            if( map.get( key ) != null )
            {
                map.put( key, map.get( key ) + "," + word );
            }
            else
            {
                map.put( key, word );
            }
        }
        Iterator iterator = map.entrySet().iterator();
        while( iterator.hasNext() )
        {
            System.out.println( ( ( Map.Entry ) iterator.next() ).getValue() );
        }
    }
1 楼 greatwqs 2012-02-03  
利用素数乘积唯一性
import java.util.HashMap;
import java.util.Map;

public class PrintGroupsWithSameLetters {

	private static final int[] prime = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
			31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101 };

	public static void main(String[] args) {
		String[] sample = { "hat", "top", "potter", "pot", "pier", "ripe" };
		PrintGroupsWithSameLetters.PrintGroupsWithSameLetters(sample);
	}

	public static void PrintGroupsWithSameLetters(String[] words) {
		Map map = new HashMap();
		for (int index = 0; index < words.length; index++) {
			PrintGroupsWithSameLetters.insertOrUpdate(map, words[index],
					getValue(words[index]));
		}
		System.out.println(map);
	}

	public static void insertOrUpdate(Map lib, String word, int value) {
		if (!lib.containsKey(value)) {
			lib.put(value, word);
		} else {
			lib.put(value, lib.get(value) + "," + word);
		}
	}

	public static int getValue(String word) {
		if (word == null || "".equals(word.trim())) {
			return -1;
		}
		word = word.toLowerCase();
		int value = 1;
		char letter[] = word.toCharArray();
		for (int index = 0; index < letter.length; index++) {
			int temp = letter[index] - 'a';
			if (temp < 0 || temp > 25) {
				return -1;
			}
			value *= prime[temp];
		}
		return value;
	}
}

相关推荐

    汇编语言程序设计练习题

    #### 练习题15:比较两个字节数组中的内容是否相同并根据比较结果输出相应的字符串。 - **知识点**: - 字节数组比较:逐个比较数组中的元素以确定它们是否相同。 - 条件输出:根据比较结果输出不同的消息。 ####...

    小学信息奥赛网寒假集训题8

    ### 小学信息奥赛网寒假集训题8解析 #### 题目概述 本套练习题旨在帮助小学生在...- **算法思路**:使用双指针法比较字符串首尾字符是否相同,直至中间位置。 - **注意事项**:处理字符串长度为奇数或偶数的不同情况。

    微软经典数据结构算法试题

    在给定的代码片段中,`perm(char s[], int i, int n)`函数应该是用来生成字符数组`s`从下标`i`开始的剩余字符的所有排列。回溯法的基本思想是在尝试所有可能的选择后回溯到上一步,尝试其他的可能性。对于含有重复...

    数据结构与算法题解

    - 实例问题:实现一个算法对数组中的元素进行随机排序。 - **位操作(BitManipulation)** - 直接对整数的二进制表示进行操作。 - 实例问题:实现一个函数来判断一个整数是否为2的幂。 #### 二、编码实践篇 **1....

    重复元素全排列

    - 这个函数接受三个参数:一个字符数组`list[]`,以及两个整数`k`和`m`。`k`代表当前处理的元素位置,`m`则是最后一个元素的索引。 - 函数首先检查`k`是否等于`m`。如果是,意味着我们已经处理完所有元素,此时将`...

    2021-2022计算机二级等级考试试题及答案No.9860.docx

    21. 数组定义:赋给一个数组的所有元素通常需要具有相同的类型。 22. 数值型常量:合法的数值型常量包括整数,如123,但不包括含有非数值字符的表达式。 23. 数据库软件:Access是由Microsoft公司开发的关系型...

    Java实验报告中的实验题.doc (2).pdf

    3. **toString()方法**:返回对象的字符串表示,便于打印和调试,如`public String toString() {...}`。 实验四介绍了类的继承性和多态性,通过Person、Student、Employee、Faculty和Staff类的层次结构展示了继承的...

    NOIP2018普及组C++试题

    - 在C/C++中,字符串通常表示为字符数组。 - **答案解析:** - 给定的程序段首先读取一个字符串到`st`数组中。 - 然后通过一个for循环遍历数组中的每一个字符。 - 循环中的具体操作未给出,需要根据题目后续...

    java的des加密用到的base64包

    `Base64`编码是一种将任意二进制数据转换为可打印ASCII字符的机制,这对于在网络协议、电子邮件或JSON中传输二进制数据非常有用,因为这些通常只支持ASCII字符集。在Java中,`Base64`类提供了多个静态方法来完成编码...

    matlab--自然排序法程序

    如果字符串长度相同,可以直接比较字符;如果长度不同,则需考虑数字和非数字部分的相对位置。 4. 整合结果:比较完所有元素后,根据比较结果重新组合字符串,得到排序后的序列。 `license.txt` 文件通常包含软件的...

    数据结构(C++)有关练习题

    D. *建立函数create:根据一维数组a[n]建立一个单链表,使单链表中各元素的次序与a[n]中各元素的次序相同,要求该程序的时间复杂度为O(n)。 E. *整理函数tideup:在非递减有序的单链表中删除值相同的多余...

    多项式程序 数据结构

    ### 多项式程序数据结构实现 #### 一、引言 在计算机科学与数学交叉领域,处理多项式运算是一项常见的需求...在未来的工作中,我们可以考虑引入更高效的数据结构和技术来优化算法性能,如哈希表用于快速查找相同项等。

    hutc-Permutation with Repetition参考代码

    本文将详细介绍一个C++程序,该程序用于生成给定字符数组的所有排列(允许重复元素),并统计这些排列的数量。此代码适用于理解如何通过递归方法实现带有重复元素的全排列算法。 #### 重要概念解释 1. **全排列...

    c# Base64C加密解密

    Base64是一种将二进制数据转化为可打印字符的编码方法,它主要用于在网络上传输含有非ASCII字符的数据。在C#中,Base64编码和解码主要通过System.Convert类提供的静态方法实现,如Convert.ToBase64String()和Convert...

    计算机专业英语名词翻译.pdf

    112. 数组:是计算机内存中一组相同类型元素的集合。 113. 指针:是存储内存地址的变量,用于直接访问内存中的数据。 114. 程序计数器:记录下一条指令的地址,是CPU中的一个特殊寄存器。 115. 指令指针:与程序...

    2021-2022计算机二级等级考试试题及答案No.10068.docx

    对于含有中文字符的字符串,每个汉字占用两个字节,所以字符串“vb程序设计”的长度为6(3个汉字加上“vb”两个字符)。 #### 8. C语言中指针的使用 - **知识点**:C语言中指针的正确使用方法。 - **解析**:在...

    c语言试题及答案.doc

    这是因为数组是由相同类型的元素组成的集合,可以通过下标访问各个元素。 ### 二、标识符规则 - **题目**: 下列字符串哪个不是标识符? - **答案**: 选项D中的“M.D.JOHN”不是有效的标识符。在C语言中,标识符...

    C#编程经验技巧宝典

    72 &lt;br&gt;0102 将字符串首字母转换大写 72 &lt;br&gt;0103 如何进行字节数组和字符串的相互转换 72 &lt;br&gt;0104 如何把一个按空格分割的字符串存储在一个ArrayList数组中 73 &lt;br&gt;4.2 获取字符串信息 73 ...

Global site tag (gtag.js) - Google Analytics