今天看编程珠玑里面,看到一个关于查找变位词的题目,大概意思如下:post,stop,tops这几个是变位词,找出类似的这些词语来。

解题思路一:既然是变位词,1、他们的长度一定是一致的;2、还有就是他们的asii码(经过排序之后,顺序应该是相同的)

   //是否为变位词
static bool IsAnagrams(string input, string word){
if (input.Length != word.Length){
return false;
}
var inputAsiis = GetAsiiOrders(input);
var wordAsiis = GetAsiiOrders(word);
return !inputAsiis.Except(wordAsiis).Any();
} //获取asii码数组(排序后)
static List<int> GetAsiiOrders(string str){
List<int> asiiList = new List<int>();
foreach (var c in str.ToCharArray()) {
asiiList.Add(c);
}
return asiiList.OrderBy(d => d).ToList();
}

上面这种做法了,不是最优解,因为要每一个,一个的进行比较。

解决方法二:一个个比较,比较完了之后移除,最后检查长度是否为零。

  static bool CheckAnagrams(string input, string word) {
foreach (var letter in input) {
var index = word.IndexOf(letter);
if (index >= 0) {
word = word.Remove(index, 1);
}
else {
return false;
}
if (word.Length == 0) {
return true;
}
}
if (word.Length == 0) {
return true;
}
return false;
}

解决思路三:(书中所说的)

            //dictionary里面存了所有的英文字典是一个List<string>。
//然后根据单词内部字母进行排序(分组)
var anagrams = dictionnary.ToLookup(SortLetter).Where(d => d.Count() > 1);
string inputWord = "post"; //类似于输入
string key = SortLetter(inputWord); //调整post顺序,为opst;
//key相等的第一项内容就是,所有对应的变位词。
var results = anagrams.FirstOrDefault(d => d.Key == key);
     static string SortLetter(string word){
char[] arr = word.ToCharArray();
Array.Sort(arr);
return new string(arr);
}

上面就是变位词算法,请大家指教。如果有不明白的地方,欢迎评论,交流。

每日一算之变位词(C#)的更多相关文章

  1. 【图灵杯 J】简单的变位词

    Description 变位词是指改变某个词的字母顺序后构成的新词.蔡老板最近沉迷研究变位词并给你扔了一道题: 给你一些单词,让你把里面的变位词分组找出来.互为变位词的归为一组,最后输出含有变位词最多 ...

  2. 剑指Offer:互为变位词

    // 判断两个单词是否互为变位词: 如果两个单词中的字母相同,并且每个字母出现的次数也相同, 那么这两个单词互为变位词 #include <stdio.h> #include <st ...

  3. Leetcode 242. Valid Anagram(有效的变位词)

    Given two strings s and t, write a function to determine if t is an anagram of s. For example, s = & ...

  4. [Swust 549]--变位词(vector水过)

    Time limit(ms): 1000 Memory limit(kb): 65535   Description 输入N和一个要查找的字符串,以下有N个字符串,我们需要找出其中的所有待查找字符串的 ...

  5. 变位词(0029)-swustoj

    变位词(0029)水题 变位词如果两个单词的组成字母完全相同,只是字母的排列顺序不一样,则它们就是变位词,两个单词相同也被认为是变位词.如tea 与eat , nic 与cin, ddc与dcd, a ...

  6. “《编程珠玑》(第2版)第2章”:C题(查找变位词,排序)

    C题是这样子的: 给定一个英语字典,找出其中的所有变位词集合.例如,“pots”.“stop”和“tops”互为变位词,因为每一个单词都可以通过改变其他单词中字母的顺序来得到. 下段分析摘自该书(P1 ...

  7. 南大算法设计与分析课程OJ答案代码(4)--变位词、三数之和

    问题 A: 变位词 时间限制: 2 Sec  内存限制: 10 MB提交: 322  解决: 59提交 状态 算法问答 题目描述 请大家在做oj题之前,仔细阅读关于抄袭的说明http://www.bi ...

  8. [leetcode]49. Group Anagrams变位词归类

    Given an array of strings, group anagrams together. Example: Input: ["eat", "tea" ...

  9. [leetcode]242. Valid Anagram验证变位词

    Given two strings s and t , write a function to determine if t is an anagram of s. Example 1: Input: ...

随机推荐

  1. numpy 矩阵在作为函数参数传递时的奇怪点

    numpy 矩阵在作为函数参数传递时的奇怪点 import numpy as np class simpleNet: def __init__(self): self.W = np.array([1, ...

  2. flask学习1

    总结 Flask Web 框架 轻量 websocket 全双工通讯 socket TCP 通讯 MongoDB 数据库 文件型数据库 {} 没有限制 和 约束 Mui + HTML5 Plus 调用 ...

  3. HOW2J 全套教程整理:Java、前端、数据库、中间件、第三方、项目、面试题

    考虑到部分同学寝室会断网,原站的所有的免费内容都提供了一个离线版本以供使用.但是它直接提供了静态页面,并不方便在手机上阅读,因为我将其转换为 EPUB. 目录 HOW2J J2EE 教程.epub H ...

  4. vc获取进程版本号

    #param comment(lib, "version.lib") CString &CMonitorManagerDlg::GetApplicationVersion( ...

  5. HttpClient的NoHttpResponse问题

       调用第三方接口时会报NoHttpResponse异常,原因是上次的连接已经断掉了,但是客户端并未知道,复用上次连接就报错了,所以要解决这个问题,就是要校验上次链接是否断掉了  1. httpCl ...

  6. ubuntu 修改文件及文件夹的权限

    转载请注明来源:https://www.cnblogs.com/hookjc/ 打开终端进入你需要修改的目录然后执行下面这条命令chmod 777 * -R全部子目录及文件权限改为 777 来源:py ...

  7. vue+element ui中select组件选择失效问题原因与解决方法

    codejing 2020-07-10 09:13:31  652  收藏 分类专栏: Web Vue Element UI 版权 .当表单form赋完值后,如果后续又对form中某一属性值进行操作如 ...

  8. hibernate中的一级缓存与闪照区

    首先Hibernate中的一级缓存默认是打开的,并且范围从session创建到session关闭,存储的数据必须是持久态的数据. 1 //从session创建开始,一级缓存也跟着创建 2 Sessio ...

  9. Python重载比较运算符

    对象包含的内置方法 class MyObj(object): def __init__(self): self.value = 0 myObj = MyObj() print(dir(myObj)) ...

  10. 7.3php编译安装最终版

    进过无数次折腾后发现编译php安装的有些难, 问题可能是自己对linux不太了解吧. [root@third src]# cd php-7.3.6 [root@third php-7.3.6]# ./ ...