C#LeetCode刷题之#242-有效的字母异位词(Valid Anagram)
问题
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4040 访问。
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
输入: s = "anagram", t = "nagaram"
输出: true
输入: s = "rat", t = "car"
输出: false
说明:你可以假设字符串只包含小写字母。
进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
Given two strings s and t , write a function to determine if t is an anagram of s.
Input: s = "anagram", t = "nagaram"
Output: true
Input: s = "rat", t = "car"
Output: false
Note:You may assume the string contains only lowercase alphabets.
Follow up:What if the inputs contain unicode characters? How would you adapt your solution to such case?
示例
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4040 访问。
public class Program {
public static void Main(string[] args) {
string s = "anagram";
string t = "nagaram";
var res = IsAnagram(s, t);
Console.WriteLine(res);
s = "rat";
t = "car";
res = IsAnagram2(s, t);
Console.WriteLine(res);
s = "program";
t = "pragrom";
res = IsAnagram3(s, t);
Console.WriteLine(res);
s = "var";
t = "char";
res = IsAnagram4(s, t);
Console.WriteLine(res);
Console.ReadKey();
}
private static bool IsAnagram(string s, string t) {
//排序比较法
if(s.Length != t.Length) return false;
var s2 = s.ToList();
s2.Sort();
var t2 = t.ToList();
t2.Sort();
for(var i = 0; i < s2.Count; i++) {
if(s2[i] != t2[i]) return false;
}
return true;
}
private static bool IsAnagram2(string s, string t) {
//数组记录法
var s2 = new int[26];
var t2 = new int[26];
foreach(var c in s) {
s2[c - 97]++;
}
foreach(var c in t) {
t2[c - 97]++;
}
for(var i = 0; i < 26; i++) {
if(s2[i] != t2[i]) return false;
}
return true;
}
private static bool IsAnagram3(string s, string t) {
//IsAnagram2的变种优化写法
var s2 = new int[26];
foreach(var c in s) {
s2[c - 97]++;
}
foreach(var c in t) {
s2[c - 97]--;
}
foreach(var item in s2) {
if(item != 0) return false;
}
return true;
}
private static bool IsAnagram4(string s, string t) {
//哈希法
var dic = new Dictionary<int, int>();
foreach(var c in s) {
if(dic.ContainsKey(c - 97)) {
dic[c - 97]++;
} else {
dic[c - 97] = 1;
}
}
foreach(var c in t) {
if(dic.ContainsKey(c - 97)) {
dic[c - 97]--;
} else {
dic[c - 97] = 1;
}
}
foreach(var item in dic) {
if(item.Value != 0) return false;
}
return true;
}
}
以上给出4种算法实现,以下是这个案例的输出结果:
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4040 访问。
True
False
True
False
分析:
显而易见,IsAnagram 的时间复杂度基于所使用的排序算法,其它3种算法的时间复杂度均为: 。
C#LeetCode刷题之#242-有效的字母异位词(Valid Anagram)的更多相关文章
- LeetCode 242. 有效的字母异位词(Valid Anagram)
242. 有效的字母异位词 LeetCode242. Valid Anagram 题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s ...
- 前端与算法 leetcode 242. 有效的字母异位词
目录 # 前端与算法 leetcode 242. 有效的字母异位词 题目描述 概要 提示 解析 解法一:哈希表 解法二:数组判断字符出现次数 解法三:转换字符串 算法 传入测试用例的运行结果 执行结果 ...
- Java实现 LeetCode 242 有效的字母异位词
242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = " ...
- 【LeetCode】242. 有效的字母异位词
242. 有效的字母异位词 知识点:字符串:哈希表 题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 注意:若 s 和 t 中每个字符出现的次数都相同,则称 ...
- [LeetCode] 242. 有效的字母异位词 valid-anagram(排序)
注意这里字母异位词的定义是:字母类别及个数都要一样,只是排列顺序不同. class Solution(object): def isAnagram(self, s, t): ""& ...
- LeetCode初级算法之字符串:242 有效的字母异位词
有效的字母异位词 题目地址:https://leetcode-cn.com/problems/valid-anagram/ 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位 ...
- C#LeetCode刷题之#520-检测大写字母(Detect Capital)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3947 访问. 给定一个单词,你需要判断单词的大写使用是否正确. ...
- C#LeetCode刷题之#125-验证回文串(Valid Palindrome)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3899 访问. 给定一个字符串,验证它是否是回文串,只考虑字母和数 ...
- C#LeetCode刷题之#680-验证回文字符串 Ⅱ(Valid Palindrome II)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3961 访问. 给定一个非空字符串 s,最多删除一个字符.判断是否 ...
随机推荐
- Ethical Hacking - GAINING ACCESS(6)
Server Side Attack Analysing scan results and exploiting target system. Go to the Analysis page and ...
- 高效C++:构造/析构/赋值
了解C++默认提供和调用的函数 编译器会自动为每一个空类创建构造函数.拷贝构造函数.赋值运算符以及析构函数 不要使用编译器自动创建的函数,要杜绝这种情况发生,自己编写这些函数 如果不想使用编译器自动生 ...
- 组件缓存注意事项 ---keep-alive
- Android给ListView添加侧滑菜单功能
贼简单,但是上次集成完之后忘记整理,所以写的有点简单 SwipeMenu类 继承自ViewGroup package com.onepilltest.others; import android.co ...
- php 导出数据到excel类
原文链接地址:http://www.oschina.net/code/snippet_212240_21885 标注:在使用时一定要屏蔽掉//$bodyVal = $this->charset( ...
- 《HelloGitHub》第 52 期
兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...
- matplotlib基础汇总_04
3D图形 导包 import numpy as np import matplotlib.pyplot as plt #3d图形必须的 from mpl_toolkits.mplot3d.axes3d ...
- PHP set_file_buffer() 函数
定义和用法 set_file_buffer() 函数设置打开文件的缓冲大小. 使用 fwrite() 函数输出结果,缓冲的大小通常为 8K.因此,如果要将两个进程写入同一个文件,那么每个文件一次最多只 ...
- PHP mt_rand() 函数
实例 生成随机数: <?phpecho(mt_rand() . "<br>");echo(mt_rand() . "<br>"); ...
- PHP strcasecmp() 函数
实例 比较两个字符串(不区分大小写): <?php高佣联盟 www.cgewang.comecho strcasecmp("Hello world!","HELLO ...