前不久在ITEYE上看到一题算法题,看了上面很多了给出了不少方案,但大多都是代码一大堆,比较难理解,这里我也写了一个,欢迎各位高手指点。
题目:给定一系列的单词,要求把字母个数和字母都相同的单词规类为一组。比如 top,fuck,you,oh,yes,pot,foot,toof,因为top和pot两个单词字母的数量相同,而且它们包括的字母都是一样的,只是字母顺序不一样,这样的单词我们都归为一组。foot与toof也认为是同一组。
思路:第一步,得到单词系列的数组,数组的元素是一个单词。
第二步,创建一个map,再遍历每个数组。
第三步,读取每个元素,将其转化为char[]数组,将其排序后,再转化为String 作为map的key值,把未排序的元素值作为value 存放到map中。存放时先检查该key对应的元素是否已经存在,如果存在,就将原来的值取出,再上当前值重新放回map中。
第四步,遍历map的所所有value,即可以得到分组后的结果。
String str="top,fuck,you,oh,yes,pot,foot,toof"; String[] strTem=str.split(","); Map map=new HashMap(); for(int i=0;i<strTem.length;i++) { String temVal=strTem[i]; char[] temChar=temVal.toCharArray(); Arrays.sort(temChar); String key=new String(temChar); if(map.get(key)==null) { map.put(key,temVal); }else{ map.put(key,map.get(key).toString()+" "+temVal); } } System.out.print(map.toString());
相关推荐
【算法面试高频必刷20题】 在面试中,算法题是评估候选人技术能力的重要环节。以下是20道常见的算法面试题,它们涵盖了各种算法和数据结构的应用: 1. **三数之和**:给定一个整数数组,找出所有三个数的组合,...
**逻辑回归**(Logistic Regression)虽然名字中有“回归”二字,但实际上是一种分类算法。它的基本思想是首先进行线性组合,然后通过一个非线性函数(如sigmoid函数)将线性组合的结果转换成介于0和1之间的值,以...
在“数据结构文本转换数值求解”这个主题中,我们主要探讨的是如何将文本数据转换为数值,然后应用算法进行求解。这在很多实际问题中都非常常见,比如自然语言处理中的词向量化、数据分析中的数据预处理等。 首先,...
- **kNN算法**:基于最近邻距离的分类算法。 - **主成分分析**:用于降维的技术。 - **局部线性嵌入**:非线性降维方法。 - **等距映射**:保持样本间距离不变的降维方法。 - **Logistic Regression**:用于分类任务...
【图像分类方法】图像分类是计算机视觉领域中的关键任务,旨在根据图像内容将其归类到预定义的类别中。在海量图像数据面前,自动化图像分类技术尤为重要,它可以帮助我们理解和组织大量的视觉信息。 【词袋模型】词...
【C++编程题1[归类].pdf】的文件中包含两道C++编程题,主要涉及面向对象编程和算法的应用。下面是这两道题目的详细解释: 第一题要求设计一个名为`WORD`的类,用于统计英文字符串中的单词个数。类的结构如下: 1. ...
采用EM算法求解的模型包括混合高斯模型、隐马尔可夫模型(HMM)等。EM算法不使用牛顿法或梯度下降法的原因在于模型含有隐变量,无法直接使用这些优化算法。 XGBoost通过树的分裂分数来给特征评分,优化特征重要性。...
4. **优化算法**:SVM的求解过程通常涉及拉格朗日乘子法和凸优化问题,可以通过SMO(Sequential Minimal Optimization)等算法来高效求解。 综上所述,SVM算法在文本分类中通过有效的特征提取,如BoW、TF-IDF、词...
以上算法在实际应用中各有优势,如决策树易于理解和解释,随机森林能够减少过拟合,逻辑回归适合概率预测,SVM擅长处理高维数据,朴素贝叶斯适合文本分类,K-NN简单但易受异常值影响,K均值用于无监督学习,Adaboost...
最大熵算法,是一种基于概率模型的学习方法,其核心思想是在所有可能的概率模型中,选取熵最大的模型作为最佳模型。熵是衡量随机变量不确定性的度量,当熵最大时,表示模型的不确定性最大,即在已知条件下,模型对...
- **最近公共祖先(LCA)的求解方法:**常用的算法有基于欧拉回路的线性时间算法、基于倍增技术的算法等。 3. **输入输出格式:** - 输入格式:树的结构及询问对。 - 输出格式:每对询问的结果,即两个节点的...
朴素贝叶斯是一种基于概率的分类算法,其核心思想是假设特征之间相互独立,并且每个特征对类别都有相同的预测贡献。在垃圾邮件分类中,该算法通过计算单词出现的概率,来判断一封邮件是否属于垃圾邮件。训练过程中,...
3. **1003 1、2、3、4、5简单题** - **知识点**: 基础数据类型、打印输出。 - **描述**: 输出一系列简单的数字。 - **难度级别**: 入门级。 - **解题思路**: 直接打印指定的数字。 4. **1004 渊子赛马排序+贪心...
根据给定文件的信息,我们可以将其中提及的历年NOIP真题按照年份和题号进行分类,并提炼出每个题目可能涉及的重要知识点以及解答这类题目时的一些经验和技巧。 ### 2000 年 #### P1017 进制转换 **所属知识点:** ...
字符串处理题目也是LeetCode的重要部分,例如"Reverse Words in a String"(翻转字符串中的单词)和"Valid Palindrome"(验证回文串)。这些题目通常涉及到字符串的遍历、分割、比较以及特殊字符的处理。 四、位...
这两个算法是用于计算文档中每个单词和主题的联合概率,从而求解出最可能的主题分配。在数学上,这通常通过贝叶斯公式和最大似然估计进行。 1. **前向算法**:计算在已知文档观察结果下,所有可能的主题分配的累积...
- **特征计数而非二值化**:在文本分类中,考虑单词出现次数而非简单二值化,以保留更多信息。 - **模型性能评估**:使用交叉验证等方法来评估模型的准确性和稳定性。 #### 四、总结 贝叶斯网络作为一种重要的概率...
k-NN是一种简单但有效的分类算法,它根据最近的k个邻居的类别进行预测。算法步骤包括计算新样本与训练数据集中每个样本的距离,然后依据邻居的多数类别决定新样本的类别。 【决策树】 决策树通过构建一系列问题来...
总结来说,朴素贝叶斯分类是一种基于贝叶斯定理和特征条件独立假设的分类算法。它通过计算后验概率来决定样本的类别,并且在计算条件概率时假设各特征独立,这极大地降低了计算复杂度。虽然这种假设在实际应用中可能...