[LeetCode] Valid Anagram - 字符串排序比较系列
题目概述:
Given two strings s and t, write a function to determine if t is an anagram of s.
For example,
s = "anagram", t = "nagaram", return true.
s = "rat", t = "car", return false.
Note: You may assume the string contains only lowercase alphabets.
解题方法:
该题意是比较两个字符串s和t,其中t是次序打乱的字符串,如果两个字符串相同则返回true,否则false。方法包括:(参考)
方法一
最简单的方法就是字符串s和t分别排序,在比较两个字符串是否相同。但是会报错TLE- Time Limit Exceeded
同样采用选择排序每次比较最小字符,不同则跳出循环返回false也TLE。
bool isAnagram(char* s, char* t) {int ls,lt; //字符串长度int i,j;char ch;if(s==NULL&&t==NULL)return true;ls=strlen(s);lt=strlen(t);if(ls!=lt)return false;//方法一 排序后判断字符串是否相等for(i=0; i<ls; i++) {for(j=i+1; j<ls; j++) {if(s[i]>=s[j]) {ch=s[i];s[i]=s[j];s[j]=ch;}if(t[i]>=t[j]) {ch=t[i];t[i]=t[j];t[j]=ch;}}}if(strcmp(s,t)==0)return true;elsereturn false;
}
方法二
后来百度下发现如果采用Java代码,通过调用内部的sort排序则会AC,但个人不喜欢调用内部函数的方法。
public class Solution { public boolean isAnagram(String s, String t) { char[] sArr = s.toCharArray(); char[] tArr = t.toCharArray(); Arrays.sort(sArr); Arrays.sort(tArr); return String.valueOf(sArr).equals(String.valueOf(tArr)); }
}
C++调用sort排序代码如下:
class Solution {
public:bool isAnagram(string s, string t) {sort(s.begin(), s.end());sort(t.begin(), t.end());return s == t;}
};
方法三
计算字符串字母个数,比较值都相同则true,否则返回false。
方法四 (强推)
通过一个长度为26的整形数组,对应英文中的26个字母a-z。从前向后循环字符串s和t,s中出现某一字母则在该字母在数组中对应的位置上加1,t中出现则减1。如果在s和t中所有字符都循环完毕后,整型数组中的所有元素都为0,则可认为s可由易位构词生成t。
bool isAnagram(char* s, char* t) {int ls,lt; //字符串长度int i;int num[26]={0};if(s==NULL&&t==NULL)return true;ls=strlen(s);lt=strlen(t);if(ls!=lt)return false;//方法四 计算字母个数 s中出现+1,t中出现-1,整个数组26个数都为0时则表示相同for(i=0; i<ls; i++) {num[s[i]-'a']++;num[t[i]-'a']--;}for(i=0; i<26; i++) {if(num[i]!=0)return false;}return true;
}
而且最后的时间结果也比较优秀: C++调用sort代码-76ms; Java调用sort代码-288ms;C语言计算字母个数-0ms。
(By:Eastmount 2015-9-14 清晨7点半 http://blog.csdn.net/eastmount/ )
[LeetCode] Valid Anagram - 字符串排序比较系列相关推荐
- LeetCode 791. 自定义字符串排序(map)
1. 题目 字符串S和 T 只包含小写字符.在S中,所有字符只会出现一次. S 已经根据某种规则进行了排序.我们要根据S中的字符顺序对T进行排序.更具体地说,如果S中x在y之前出现,那么返回的字符串中 ...
- [LeetCode] Valid Anagram
Given two strings s and t, write a function to determine if t is an anagram of s. For example, s = & ...
- LeetCode[791] 自定义字符串排序
最近断断续续也刷了点题,但都没什么意思,印象里好像一直在递归,所以也没有特别记录. 今天这道题虽然很简单,但终于不是递归了,而且其中一位前辈的解答用到了一个我不了解的C++11特性--lambda. ...
- c++ 多个字符串排序_RPython Data Science系列:数据处理(5)--字符串函数基于R(一)
0 前言 数据根据结构可以分为结构化数据.非结构化数据和半结构化数据,前面介绍的数据处理函数针对于结构化数据,而字符串通常包含非结构化或者半结构化数据,这一部分介绍一下R和Python中的字符串函数 ...
- 算法系列—低位优先的字符串排序(基于键索引计数法)
原理日后有空补上.今天该回宿舍了- - 此版本可实现相同长度的字符串数组,不同长度稍加改动即可. C++代码如下: #include<iostream> #include <stri ...
- C#LeetCode刷题-字符串
字符串篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串 24.6% 中等 5 最长回文子串 22.4% 中等 6 Z字形变换 35.8% 中等 8 字符串转整数 (atoi) 15.3% 中 ...
- LeetCode实战:字符串相乘
题目英文 Given two non-negative integers num1 and num2 represented as strings, return the product of num ...
- LeetCode实战:字符串相加
题目英文 Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and ...
- LeetCode实战:删除排序数组中的重复项
题目英文 Given a sorted array nums, remove the duplicates in-place such that each element appear only on ...
最新文章
- 栈与队列1——设计getMin功能的栈
- (转)android UI进阶之用ViewPager实现欢迎引导页面
- retinajs 使用方法
- 自己喜欢的shell终端配置
- C#类中的internal成员可能是一种坏味道
- 你在做大数据?你有目标么?
- Node.js框架对比:Express/Koa/Hapi
- RX异常点检测算法(马氏距离)
- 3-8《Ruby元编程》第二章对象模型
- vscode多开远程链接矩池云服务器
- 腾讯云刘颖:与微信共建小程序开发者生态,让小程序开发更简单
- Bailian4098 第二大价值【排序+最值】
- 关键字值集合和IDictionary
- QTalk 基于Qt的局域网聊天软件(beta 0.1.0)
- 【C语言】素数/质数
- 手机图形计算器matlab,Mathlab图形计算器
- IPFS时代来临,FIL WORLD重赋存储灵魂
- warmup与余弦退火学习率
- Hive的行列转换(行转多列、多列转行、行转单列、单列转行)
- SpringBoot中通过Redis的setnx和自定义注解@Idempotent实现API幂等处理