【LintCode】两个字符串是变位词
2017-02-09 14:57
183 查看
写出一个函数 anagram(s, t) 判断两个字符串是否可以通过改变字母的顺序变成一样的字符串。
样例
给出 s = “abcd”,t=”dcab”,返回 true.
给出 s = “ab”, t = “ab”, 返回 true.
给出 s = “ab”, t = “ac”, 返回 false.
分析逻辑
1.判断A与B相等,A或B为null,A和B长度不等
2.正常情况循环A字符串中每个字符,定义一个map对象
比喻一个场景,判断甲和乙手里的钱是否一样多,且面额张数也一致
面额:1元,5元,10元,20元,50元,100元
排序可以实现,试想一下,金额足够大呢,10000或者100W,是否排序很低效?
简单一点吧,计数,我们只需要记下不同面额的个数
现在甲和乙开始往盒子里放钱了
我们来计数吧
1.甲放一张5元,看看是否记下面额5元的个数,没有记下的话,记下好了,5元1张,如果有记录,那么5元的总张数+1张,如果目前5元总张数为0,即删除5元面额记录数
2.乙放一张10元,看看是否记下面额5元的个数,没有记下的话,记下好了,5元负1张,如果有记录,那么5元的总张数-1张,如果目前5元总张数为0,即删除5元面额记录数
最后什么记录都没有,说明甲和乙手里钱一样多,且面额张数一致
样例
给出 s = “abcd”,t=”dcab”,返回 true.
给出 s = “ab”, t = “ab”, 返回 true.
给出 s = “ab”, t = “ac”, 返回 false.
分析逻辑
1.判断A与B相等,A或B为null,A和B长度不等
2.正常情况循环A字符串中每个字符,定义一个map对象
比喻一个场景,判断甲和乙手里的钱是否一样多,且面额张数也一致
面额:1元,5元,10元,20元,50元,100元
排序可以实现,试想一下,金额足够大呢,10000或者100W,是否排序很低效?
简单一点吧,计数,我们只需要记下不同面额的个数
现在甲和乙开始往盒子里放钱了
我们来计数吧
1.甲放一张5元,看看是否记下面额5元的个数,没有记下的话,记下好了,5元1张,如果有记录,那么5元的总张数+1张,如果目前5元总张数为0,即删除5元面额记录数
2.乙放一张10元,看看是否记下面额5元的个数,没有记下的话,记下好了,5元负1张,如果有记录,那么5元的总张数-1张,如果目前5元总张数为0,即删除5元面额记录数
最后什么记录都没有,说明甲和乙手里钱一样多,且面额张数一致
public class Solution { /** * @param s: The first string * @param b: The second string * @return true or false */ public boolean anagram(String s, String t) { // write your code here if (s == t || s.equals(t)) { return true; } if (null == s || null == t || s.length() != t.length()) { return false; } Map<Character, Integer> map = new HashMap<Character, Integer>(); for (int i = 0; i < s.length(); i++) { char a = s.charAt(i); if (map.containsKey(a)) { map.put(a, map.get(a) + 1); if (map.get(a) == 0) { map.remove(a); } } else { map.put(a, 1); } char b = t.charAt(i); if (map.containsKey(b)) { map.put(b, map.get(b) - 1); if (map.get(b) == 0) { map.remove(b); } } else { map.put(b, -1); } } if (map.size() == 0) { return true; } else { return false; } } }
相关文章推荐
- 两个字符串是否是变位词(直接lintcode敲代码,一次通过,噢耶!)
- Lintcode--002(两个字符串是变位词)
- LintCode:两个字符串是变位词
- Lintcode—(1)两个字符串是变位词
- Lintcode(1)-两个字符串是变位词
- LintCode-两个字符串是变位词
- 两个字符串是变位词-LintCode
- lintcode-158-两个字符串是变位词
- 【LintCode 简单】158. 两个字符串是变位词
- lintCode_两个字符串是变位词
- [lintcode]两个字符串是变位词
- LintCode : 两个字符串是变位词
- 005判断两个字符串是否是变位词 (keep it up)
- (158)两个字符串是变位词
- 题目 :两个字符串是变位词
- cci-Q1.4 判断两个字符串是否为变位词
- 两个字符串是变位词
- [LintCode]158.两个字符串是变位词(ps:OJ上相同的代码执行时间会差很多吗)
- 两个字符串是变位词
- 数组字符串系列之:判断两个字符串是否是变位词