LintCode(158)
两个字符串是变位词
写出一个函数 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)相关推荐
- LintCode 158: Anagram
LintCode 158: Anagram 题目描述 写出一个函数anagram(s, t)判断两个字符串是否可以通过改变字母的顺序变成一样的字符串. 样例 给出s = "abcd" ...
- LintCode 249. 统计前面比自己小的数的个数
给定一个整数数组(下标由 0 到 n-1, n 表示数组的规模,取值范围由 0 到10000).对于数组中的每个 ai 元素,请计算 ai 前的数中比它小的元素的数量. 注意事项 We suggest ...
- DeepMind提图像生成的递归神经网络DRAW,158行Python代码复现
作者 | Samuel Noriega 译者 | Freesia 编辑 | 夕颜 出品 | AI科技大本营(ID: rgznai100) [导读]最近,谷歌 DeepMInd 发表论文( DRAW: ...
- 厉害了!一本正经地为单身狗推荐这个158万张图像的鉴黄数据集
本文转自"机器之心"(almosthuman2014) 如果你想训练一个内容审核系统过滤不合适的信息,或用 GAN 实现一些大胆的想法,那么数据集是必不可少的.但限制级图像很难收集 ...
- 158行Python代码复现:DeepMind提图像生成的递归神经网络DRAW
授权自AI科技大本营(ID:rgznai100) 本文约5200字,建议阅读10+分钟. 本文作者基于代码实现系统的思路,详细阐述了 DRAW 的概念.架构和优势等. [ 导读 ]最近,谷歌 Deep ...
- LintCode: Max Tree
题目 Given an integer array with no duplicates. A max tree building on this array is defined as follow ...
- 【LintCode: 3. 统计数字】算法题解析
这是一道来自LintCode的算法题目,本文用C++来解答这道题,链接为: https://www.lintcode.com/problem/digit-counts/description 题目描述 ...
- 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 ...
- LintCode 1.A+B的问题
LintCode 1.A+B的问题 描述 给出两个整数 a 和 b , 求他们的和. 答案 public class Solution {/*** @param a: An integer* @par ...
最新文章
- Linux动态库和静态库比较
- 关于python mysql
- WPF一步一脚印系列(1):万事起头难
- python -asyncio
- Angular应用一个创建场景的问题分析
- Airflow 中文文档:集成
- C++虚函数的实现原理(最通俗但并不想专业的解释)
- python进阶05并发之一基本概念
- 机器学习笔记网盘分享
- vba单元格批量赋值_「经验」快速学习VBA
- 赤手空拳如何成就百万富翁? 赤手空拳如何成就百万富翁?——网络营销之七(第四招:百度文库+)...
- 操作简单、功能务实——四维星软件
- CC2530天线发射功率与接收灵敏度——玩转ZigBee的高端操作(Zstack框架)
- 【学习笔记】C++ 编程规范——101条规则、准则与最佳实践
- 易懂介绍Java中类与对象、构造方法、继承
- 笔记本加装固态硬盘后系统迁移,开机出现桌面闪烁问题的解决方法
- MVT 之 M——模型
- 戴蒙德对新冠疫情等的分析与看法笔记
- 《Braid》碎片式台词
- Gavin老师Transformer直播课感悟 - 通过Rasa Interactive对Rasa对话机器人项目实战之ConcertBot源码、流程及对话过程解密(四十三)
热门文章
- 针对知识图谱嵌入(KGE)的投毒攻击【论文阅读】
- 已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组
- linux nat和网桥多网卡,linux 双网卡 NAT共享上网
- 南方科技大学招计算机博后,南方科技大学何祝兵课题组招聘博后 年薪30万
- Deeplabv3+ Pytorch训练cityscapes数据集
- phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接--解决方法
- C:\windows\system32文件
- Datawhale组队学习-NLP新闻文本分类-TASK05
- 生活篇之工资和年终奖的纳税
- 【转】键盘灯亮无反映解决方法