IT企业面试题(java描述)-字符串包含(1)
2016-02-16 17:16
621 查看
题目:
给出长字符串和短字符串,检查短字符串里面的字符是否都在长字符串里面出现。
例子:
长字符串:“abcdef”
短字符串:“abc” "abb" “ae”
检查结果是:true,true,false
1.思路
(1)暴力解法
使用双循环轮询,但是这种算法的缺点是时间复杂度为O(m*n)
(2)使用HashMap的特性
利用HashMap的特性,首先把长字符串按字符放入map里面,计算map的size,然后再把短字符串按字符放进去,在计算map的size,对比两次的结果,如果是等于,就是都在里面,如果是大于,就是有不在的字符
这种算法的空间复杂度是O(m+n)
2.代码
(1)暴力解法代码:
测试返回:
true
true
false
(2)使用HashMap的代码:
测试返回:
true
true
false
总结:这一章节主要介绍了字符串包含面试题的两种思路和代码。
给出长字符串和短字符串,检查短字符串里面的字符是否都在长字符串里面出现。
例子:
长字符串:“abcdef”
短字符串:“abc” "abb" “ae”
检查结果是:true,true,false
1.思路
(1)暴力解法
使用双循环轮询,但是这种算法的缺点是时间复杂度为O(m*n)
(2)使用HashMap的特性
利用HashMap的特性,首先把长字符串按字符放入map里面,计算map的size,然后再把短字符串按字符放进去,在计算map的size,对比两次的结果,如果是等于,就是都在里面,如果是大于,就是有不在的字符
这种算法的空间复杂度是O(m+n)
2.代码
(1)暴力解法代码:
package com.ray.interview.ch01.topic_1_2; /** * 检查字符串b里面的字符是否在a里面都出现过 * * @author raylee * @date 2016-02-16 * @version 1.0 */ public class ContainString_1 { public static boolean isContain(String a, String b) { boolean isContainStr = true; char[] charA_array = a.toCharArray(); char[] charB_array = b.toCharArray(); for (int i = 0; i < charB_array.length; i++) { boolean isContainChar = false; for (int j = 0; (j < charA_array.length); j++) { if (charA_array[j] == charB_array[i]) { isContainChar = true; break; } } if (!isContainChar) { isContainStr = false; break; } } return isContainStr; } public static void main(String[] args) { String a = "abc", b = "abb"; System.out.println(isContain(a, b)); String c = "abc", d = "aaa"; System.out.println(isContain(c, d)); String e = "cba", f = "ea"; System.out.println(isContain(e, f)); } }
测试返回:
true
true
false
(2)使用HashMap的代码:
package com.ray.interview.ch01.topic_1_2; import java.util.HashMap; /** * 检查字符串b里面的字符是否在a里面都出现过 * * @author raylee * @date 2016-02-16 * @version 1.0 */ public class ContainString_2 { public static boolean isContain(String a, String b) { boolean isContainStr = true; char[] charA_array = a.toCharArray(); char[] charB_array = b.toCharArray(); HashMap<Character, Character> map = new HashMap<>(); for (int i = 0; i < charA_array.length; i++) { map.put(charA_array[i], charA_array[i]); } int sizeA = map.keySet().size(); for (int i = 0; i < charB_array.length; i++) { map.put(charB_array[i], charB_array[i]); } int sizeB = map.keySet().size(); if (sizeA < sizeB) { isContainStr = false; } return isContainStr; } public static void main(String[] args) { String a = "abc", b = "abb"; System.out.println(isContain(a, b)); String c = "abc", d = "aaa"; System.out.println(isContain(c, d)); String e = "cba", f = "ea"; System.out.println(isContain(e, f)); } }
测试返回:
true
true
false
总结:这一章节主要介绍了字符串包含面试题的两种思路和代码。
相关文章推荐
- 据说年薪30万的Android程序员必须知道的帖子
- 收录一些常用的面试题目
- cyc 的面试宝典之(面试1(java se 基础篇))
- 不少程序员都会碰到的三个面试题
- 如何利用Google成为一个更好的程序员
- 码农十年连载一
- 百度员工离职总结:资质平庸的人该怎么办?震惊了无数人!
- Java系统程序员修炼之道
- 程序员的恶性循环
- 一个菜鸟程序员的游戏开发心得
- 50道线程面试题
- 如何利用Google成为一个更好的程序员
- Android 面试题学习
- 面试题—链表操作2
- C#面试题
- 怎么写出一本程序员风格的修真小说
- 精选新浪php面试题
- 利用Google成为一个更好的程序员
- Android面试题收集
- 如何利用 Google 成为一个更好的程序员