LeetCode OJ Valid Anagram 字符串
2015-08-06 22:50
405 查看
Valid Anagram Total Accepted: 8432 Total Submissions: 23731 My Submissions Question Solution
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.
意思就是比较两个字符串里的字符是否相同, 不关心字符的顺序
注意可以用
长度相等时, 若两个字符串不是Anagram, 则counts[]其中肯定有负数, 可以提前在
问: counts[]在
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.
意思就是比较两个字符串里的字符是否相同, 不关心字符的顺序
方法1 将两个字符串排序后, 比较是否相同
注意Java没有实现char[] toString() 方法, 需要用String.valueOf()将字符串数组转化为字符串.
[code]import java.util.Arrays; public class ValidAnagram { public static void main(String[] args) { System.out.println(isAnagram("anagram", "anagram")); System.out.println(isAnagram("anagram", "nagaram")); System.out.println(isAnagram("car", "rat")); System.out.println(isAnagram("car", "rac")); } public static boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } char[] sChar = s.toCharArray(); char[] tChar = t.toCharArray(); Arrays.sort(sChar); Arrays.sort(tChar); return String.valueOf(sChar).equals(String.valueOf(tChar)); } }
方法2 比较每个字符的出现次数
新建26长度的数组存放每个字符出现的个数注意可以用
s.charAt(i) - 'a'来标记字符在数组中的位置
[code]import java.util.Arrays; public class ValidAnagram { public static void main(String[] args) { System.out.println(isAnagram("anagram", "anagram")); System.out.println(isAnagram("anagram", "nagaram")); System.out.println(isAnagram("car", "rat")); System.out.println(isAnagram("car", "rac")); } public static boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } int[] counts = new int[26]; for (int i = 0; i < s.length(); i++) { counts[s.charAt(i) - 'a']++; } for (int i = 0; i < t.length(); i++) { counts[t.charAt(i) - 'a']--; } for (int i = 0; i < 26; i++) { if (counts[i] != 0) { return false; } } return true; } }
方法2 优化
注意到两个字符串长度不等时, 直接返回false.长度相等时, 若两个字符串不是Anagram, 则counts[]其中肯定有负数, 可以提前在
for (int i = 0; i < t.length(); i++)里进行判别.
问: counts[]在
for (int i = 0; i < t.length(); i++)会先变成负数再变成正数吗? 不会, 因为
counts[t.charAt(i) - 'a']--一直都是减减操作
[code]import java.util.Arrays; public class ValidAnagram { public static void main(String[] args) { System.out.println(isAnagram("anagram", "anagram")); System.out.println(isAnagram("anagram", "nagaram")); System.out.println(isAnagram("car", "rat")); System.out.println(isAnagram("car", "rac")); } public static boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } int[] counts = new int[26]; for (int i = 0; i < s.length(); i++) { counts[s.charAt(i) - 'a']++; } for (int i = 0; i < t.length(); i++) { counts[t.charAt(i) - 'a']--; if (counts[t.charAt(i) - 'a'] < 0) { return false; } } return true; } }
相关文章推荐
- STM32学习笔记(四)------DS18B20的操作与使用
- 最近犯的错误
- Class.getSimpleName()的作用
- Yii2数据库操作 事务
- Leetcode: Happy Number
- 1181 变形课【dfs】
- VLC 2.2.1版本的全频和截图功能实现了
- HDU 5353 Average (2015年多校比赛第6场)
- ENode简介与各种资源汇总
- jQuery对象和DOM对象的相关知识
- dede_arctype|栏目表
- 上传本地项目至github
- 简单的冒泡排序
- 梭子鱼垃圾邮件网关-Barracuda Spam & Virus Firewall Email Alert: outQueueHigh
- *POJ 1741 - Tree(树形DP‘树的分治)
- 20150805 (网页定位导航+瀑布流布局+信息排列)JS+JQuery+CSS3效果实现笔记
- 第一个Android应用程序
- HDU 3549 Flow Problem
- 【C++】双向线性链表容器的实现
- java生成简单流水号