Valid Anagram&Group Anagrams
来源:互联网 发布:网络运营工程师做什么 编辑:程序博客网 时间:2024/06/05 17:12
Vaild Anagram
Title: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.
- 首次,带大家了解一下什么是回文构词法(Anagram),即字符串总长度相等,且字符串中各个字符数目相同。
- 然后本人提供如下2种方法:
- (1)先排序后比较; (2)先计数后比较
(1)先排序后比较:
JS实现:
var isAnagram = function(s, t) { if(s.length!==t.length) { return false; } if(s.length===1) { if(s!==t) { return false; } } var s1=s.split("");//一个字符串分割成字符串数组 var s2=t.split(""); s1.sort(); s2.sort(); var ss=s1.join("");//将字符串数组连接成字符串 var tt=s2.join(""); if(ss!==tt) { return false; } return true;}
运行时间为:130ms。
思路:1.stringObject.split(separator,howmany),用于把一个字符串分割成字符串数组。
2.arrayObject.sort(sortby),用于对数组的元素进行排序。sortby 可选。规定排序顺序。必须是函数。
3.arrayObject.join(separator),用于把数组中的所有元素放入一个字符串。separator 可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。
利用以上上个函数,将字符串分解成字符串数组后,排序,然后再组合成字符串;再比较S与T是否相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)); }
} a代码:
(2)先计数后比较
var isAnagram = function(s, t) { var total1={}; //用于存储s中的属性值 var total2={}; //用于存储t中的属性值 if(s.length!==t.length) //首先判断两个字符串的长度是否相等 { return false; } for(var i=0,len=s.length;i<len;i++) { var val1=s.substr(i,1); //依次遍历s的值 var val2=t.substr(i,1);//依次遍历t的值 if(total1.hasOwnProperty(val1)) //检查S中是否含有val1属性,若有则加1,否则加入该属性 { total1[val1]++; }else{ total1[val1]=1; } if(total2.hasOwnProperty(val2)) //检查t中是否含有val2属性,若有则加1,否则加入该属性 { total2[val2]++; }else{ total2[val2]=1; } } for(var key in total1) //判断两个字符串中对应的字符数是否相等 { if(total1[key]!==total2[key]) { return false; }} return true;};
运行时间:130ms
思路:利用total1,total2对象分别存储数组中字符数量,其中,key对应于数组中的字符,value为相应字符出现的次数;同时遍历数组,计算字符数量存入对象中;遍历完后比较total1,total2对象对应键值对是否相等。
Group Anagram
Given an array of strings, group anagrams together.
For example, given: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
Return:
[
[“ate”, “eat”,”tea”],
[“nat”,”tan”],
[“bat”]
]
JS代码:
var groupAnagrams = function(strs) { if(strs.length===0) { return null; } var strsObj={}; var result=[]; if((strs.length===1)) { result[0]=strs; return result; } for(var i=0,len=strs.length;i<strs.length;i++) //遍历strs数组,并将数组中的字符串排序后依次存入strsObj对象中 { var str=[], str1=""; if(strs[i].length>0) { str=strs[i].split("");//将字符串转换为字符串数组 str.sort();//对字符串数组进行排序 str1=str.join("");//将排序后的字符串数组连接成字符串 } if(strsObj.hasOwnProperty(str1)) { strsObj[str1].push(i); }else { strsObj[str1]=[]; strsObj[str1].push(i); } } var index=0; for(var key in strsObj) { result[index]=[]; for(var j=0,len1=strsObj[key].length;j<len1;j++) { var strsIndex=strsObj[key][j]; result[index].push(strs[strsIndex]); } index++; } return result;};
思路:1、对每个数组中所包含的字符串进行排序,存储与对象数组(即对象中的值为数组:var obj={[],[],[]…})中,key对应于排序后的字符串,value为原数组中index。
2.遍历对象,将对象中对应的每个键的值取出,var strsIndex=strsObj[key][j];
result[index].push(strs[strsIndex]);
- Valid Anagram&Group Anagrams
- Leetcode 49. Group Anagrams & 242. Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- Valid Anagram
- 1、考虑用静态工厂方法代替构造器(effective java)
- givm 简单使用教程
- boosting算法
- (RHCSA)3 权限管理
- 检查进程 还有 端口的命令
- Valid Anagram&Group Anagrams
- 代码动态设置字体颜色
- 获取mac最高root权限登录系统
- 还是-1岁的产品经理
- 毛泽东文选 mp3
- C++高精度模板
- 定义表示乘法的函数对象--重载函数
- (RHCSA)4 日志系统简单配置
- 拉格朗日乘数法