两个字符串是变位词
写出一个函数 anagram(s, t) 去判断两个字符串是否是颠倒字母顺序构成的
样例
给出 s="abcd"t="dcba",返回ture

未采用数据结构的写法:

public class Solution {/*** @param s: The first string* @param t: The second string* @return true or false*/public boolean anagram(String s, String t) {// write your code hereint a = s.length();int b = t.length();if (a != b){return false;}for (int i = 0; i < a; i++){char m = s.charAt(i);int num = 0; //标记值for (int j = 0; j < a; j++){if (t.charAt(j) == m){num = 1;}}if (num == 1){continue;} else {return false;}}return true;}
};

此种解法实际是有错误的,比如"abbb","baaa"会被误认为是变位词,实际未然。

利用hash表对字符串存储,可得到理想的结果。代码如下:

import java.util.*;
public class test{
public boolean compareStrings(String A, String B) {test cs = new test();if(B.length() > A.length())return false;Map<Character,Integer> aMap = cs.StringToMap(A);for(int i = 0; i < B.length(); i++){char b = B.charAt(i);if (aMap.containsKey(b)){if(aMap.get(b) > 1){int times = aMap.get(b)-1;aMap.put(b, times);}elseaMap.remove(b);}elsereturn false;}return true;
}public Map<Character,Integer> StringToMap(String S){Map<Character,Integer> sMap = new HashMap<Character,Integer>();for(int i = 0; i < S.length();i++){char a = S.charAt(i);if(sMap.containsKey(a)){int times = sMap.get(a)+1;sMap.put(a, times);}elsesMap.put(a, 1);}return sMap;
}public static void main(String []args){test cst = new test();boolean c = cst.compareStrings("aaadbb", "dbaaba");System.out.print(c);
}
}

函数StringToMap 完成的功能是将字符串存储在hash表中,且返回一个对应的map映射。
比如StringToMap("lint"),返回的map<Character,Integer> 映射为{t=1, n=1, l=1, i=1}
StringToMap("aaadbb") 返回的map 映射为{d=1,b=2,a=3};
(不过此处put函数为何按照字母从大到小放入到map中呢?不解)
compareStrings()的思路其实同StringToMap() 函数。

算法复杂度是O(n) 吧。

LintCode(158)相关推荐

  1. LintCode 158: Anagram

    LintCode 158: Anagram 题目描述 写出一个函数anagram(s, t)判断两个字符串是否可以通过改变字母的顺序变成一样的字符串. 样例 给出s = "abcd" ...

  2. LintCode 249. 统计前面比自己小的数的个数

    给定一个整数数组(下标由 0 到 n-1, n 表示数组的规模,取值范围由 0 到10000).对于数组中的每个 ai 元素,请计算 ai 前的数中比它小的元素的数量. 注意事项 We suggest ...

  3. DeepMind提图像生成的递归神经网络DRAW,158行Python代码复现

    作者 | Samuel Noriega 译者 | Freesia 编辑 | 夕颜 出品 | AI科技大本营(ID: rgznai100) [导读]最近,谷歌 DeepMInd 发表论文( DRAW: ...

  4. 厉害了!一本正经地为单身狗推荐这个158万张图像的鉴黄数据集

    本文转自"机器之心"(almosthuman2014) 如果你想训练一个内容审核系统过滤不合适的信息,或用 GAN 实现一些大胆的想法,那么数据集是必不可少的.但限制级图像很难收集 ...

  5. 158行Python代码复现:DeepMind提图像生成的递归神经网络DRAW

    授权自AI科技大本营(ID:rgznai100) 本文约5200字,建议阅读10+分钟. 本文作者基于代码实现系统的思路,详细阐述了 DRAW 的概念.架构和优势等. [ 导读 ]最近,谷歌 Deep ...

  6. LintCode: Max Tree

    题目 Given an integer array with no duplicates. A max tree building on this array is defined as follow ...

  7. 【LintCode: 3. 统计数字】算法题解析

    这是一道来自LintCode的算法题目,本文用C++来解答这道题,链接为: https://www.lintcode.com/problem/digit-counts/description 题目描述 ...

  8. appcompat_v7\res\values-v21\themes_base.xml:158: error: Error: No resource

    C:\DevelopSoft\workspace\appcompat_v7\res\values-v21\themes_base.xml:158: error: Error: No resource ...

  9. LintCode 1.A+B的问题

    LintCode 1.A+B的问题 描述 给出两个整数 a 和 b , 求他们的和. 答案 public class Solution {/*** @param a: An integer* @par ...

最新文章

  1. Linux动态库和静态库比较
  2. 关于python mysql
  3. WPF一步一脚印系列(1):万事起头难
  4. python -asyncio
  5. Angular应用一个创建场景的问题分析
  6. Airflow 中文文档:集成
  7. C++虚函数的实现原理(最通俗但并不想专业的解释)
  8. python进阶05并发之一基本概念
  9. 机器学习笔记网盘分享
  10. vba单元格批量赋值_「经验」快速学习VBA
  11. 赤手空拳如何成就百万富翁? 赤手空拳如何成就百万富翁?——网络营销之七(第四招:百度文库+)...
  12. 操作简单、功能务实——四维星软件
  13. CC2530天线发射功率与接收灵敏度——玩转ZigBee的高端操作(Zstack框架)
  14. 【学习笔记】C++ 编程规范——101条规则、准则与最佳实践
  15. 易懂介绍Java中类与对象、构造方法、继承
  16. 笔记本加装固态硬盘后系统迁移,开机出现桌面闪烁问题的解决方法
  17. MVT 之 M——模型
  18. 戴蒙德对新冠疫情等的分析与看法笔记
  19. 《Braid》碎片式台词
  20. Gavin老师Transformer直播课感悟 - 通过Rasa Interactive对Rasa对话机器人项目实战之ConcertBot源码、流程及对话过程解密(四十三)

热门文章

  1. 针对知识图谱嵌入(KGE)的投毒攻击【论文阅读】
  2. 已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组
  3. linux nat和网桥多网卡,linux 双网卡 NAT共享上网
  4. 南方科技大学招计算机博后,南方科技大学何祝兵课题组招聘博后 年薪30万
  5. Deeplabv3+ Pytorch训练cityscapes数据集
  6. phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接--解决方法
  7. C:\windows\system32文件
  8. Datawhale组队学习-NLP新闻文本分类-TASK05
  9. 生活篇之工资和年终奖的纳税
  10. 【转】键盘灯亮无反映解决方法