文档章节

LintCode刷题之路(一)

StayY
 StayY
发布于 2016/11/21 12:11
字数 463
阅读 36
收藏 0
点赞 0
评论 0

在算法和数据结构上,我觉得我是一个彻彻底底的小白,开始刷题吧。

#阶梯训练

###1. 两个字符串是变位词

######写出一个函数 anagram(s, t) 判断两个字符串是否可以通过改变字母的顺序变成一样的字符串。

样例

给出 s = "abcd",t="dcab",返回 true.

给出 s = "ab", t = "ab", 返回 true.

给出 s = "ab", t = "ac", 返回 false.

首先看到这个题目 我们想到的就是字符串排序了,通过排序把字符调换成有顺序的字符串,再来比较。

所以就会出现以下代码

public class Solution {
    /**
     * @param s: The first string
     * @param b: The second string
     * @return true or false
     */
    public boolean anagram(String s, String t) {
        //先查看长度是否相等,不相等则返回false
        if(s.length() != t.length()){
            return false;
        }
        //转换成字符 然后排序
        char[] sChar = s.toCharArray();
        char[] tChar = t.toCharArray();
        Arrays.sort(sChar);
        Arrays.sort(tChar);
        for(int i=0;i<s.length();i++){
            if(sChar[i]!=tChar[i]){
                return false;
            }
        }
        return true;
    }
};

由于以上是两个字符串之间的比较,所以就能很方便的这样用,但是如果是多个字符串数组又是怎么比较的呢,这个问题后面会有。

九章算法提供的答案是

public class Solution {
    /**
     * @param s: The first string
     * @param b: The second string
     * @return true or false
     */
    public boolean anagram(String s, String t) {
        if (s.length() != t.length()) {
           return false;
        }
        
        int[] count = new int[256];
        for (int i = 0; i < s.length(); i++) {
            count[(int) s.charAt(i)]++;
        }
        for (int i = 0; i < t.length(); i++) {
            count[(int) t.charAt(i)]--;
            if (count[(int) t.charAt(i)] < 0) {
                return false;
            }
        }
        return true;
    }
};

这个方法是用一个数组存放 把字符串中的字符用数组记录下来 先把第一个字符串的字符通过数组记录下来,数组中存在就+1,再用第二个数组的索引去减1,如果有小于0的值出现,就说明两个字符串不相等。

© 著作权归作者所有

共有 人打赏支持
StayY
粉丝 0
博文 34
码字总数 21515
作品 0
南昌
程序员
小米面经-技术岗(编程小白如何进阶)

先介绍下背景,我本科专业是硬件转软件方面,所以一开始算法基础比较差,没有做过系统设计,为了能得到好的面试机会,我一直都有努力准备,还在网上关注了各种能提高编程能力的攻略,我觉得打...

coderer ⋅ 2017/05/08 ⋅ 0

鹅厂奋战历程简录

从开始准备到最后尘埃落定,和鹅厂总共纠缠了近10个月,所幸最终拿到Offer,也算万事完满。 2015.12 12月中旬,和一读研学长讨论今后出路。本觉得以自己的水平万不可眼界过高放眼鹅厂这种互联...

sun511230 ⋅ 2017/05/25 ⋅ 0

二战大众点评,斩获软件工程师 offer

先介绍一下自己,国内某985 CS专业学渣一名,高考考完刚被录取的时候,还立下了小目标说一定要去BAT,现在回过头想想……真是好有勇气啊。大学的前两年在平时翘翘课、窝在寝室里面打打游戏,...

wb596aedb820f7a ⋅ 2017/07/16 ⋅ 0

快手 Android 工程师面经

看着我把简历投完之后弹出的“完成”字样,我就十分的激动了,我是一名应届毕业生,老老实实的那种,学过的知识我都一步一个脚印的复习的完了,Lintcode上该刷的题,也妥妥的完成了,但是一想...

Winnielyn ⋅ 2017/07/18 ⋅ 0

【干货分享】面试小技巧

纪念一下第一份面试经历 美团面试主要就是分为笔试和面试,笔试以后我恬不知耻地去霸面了(其实也不觉得有什么恬不知耻,权当考察去了)但其实笔试完没多久后我就接到了约面试时间的电话了。...

路过全世界 ⋅ 2017/04/26 ⋅ 0

Twitter Software Engineer 面经

去年十月份左右因为感觉要提前找找工作,所以比较盲目地投了不少简历,当时拿到了几个公司的面试,但都因为自己表现太差劲失败了。后来回来后就分析了分析自身的问题,还是基础太薄弱,面试时...

Winnielyn ⋅ 2017/08/23 ⋅ 0

蚂蚁金服面试经历(内含大量干货)

4号通过阿里工作的学长进行内推,7天简历评估,11号接到电话面试,尽管猝不及防回答仓促,但好在前期准备充分,通过。3天后进行现场面试,通知时间为早上10点。当日设了七点闹钟,结果五点五...

qq59360ce9f231b ⋅ 2017/06/06 ⋅ 0

Facebook Software Engineer 电面面经

前不久刚刚面试了Facebook,面试的岗位是软件工程师。很有幸通过了facebook的电面,所以来分享一下电面的经验,也希望和大家交流一下。 讲真facebook的效率不愧是出了名的高,我在得到通过了...

wb5922c9234fafc ⋅ 2017/05/22 ⋅ 0

Facebook Software Engineer 电面面经

前不久刚刚面试了Facebook,面试的岗位是软件工程师。很有幸通过了facebook的电面,所以来分享一下电面的经验,也希望和大家交流一下。 讲真facebook的效率不愧是出了名的高,我在得到通过了...

sun511230 ⋅ 2017/05/21 ⋅ 0

华为二面心得 Take IT Easy!

今天刚结束了华为的面试,这应该是我为数不多的像样的面试了。虽然整个过程难度不大,但是不管怎样我都觉得接触到了另一个世界,自己开始成长了,还冒出了不少新想法。趁着熄灯睡觉前把面经敲...

陈许愿25 ⋅ 2017/05/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

BS与CS的联系与区别【简】

C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、InFORMix或 SQL Server。客户端需要安装专用的客户端软件。 B/S是Brower/...

anlve ⋅ 29分钟前 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 49分钟前 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部