字符串置换

描述:

给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。

置换的意思是,通过改变顺序可以使得两个字符串相等。

样例:

"abc""cba" 的置换。

"aabc" 不是 "abcc" 的置换。

思路:

误区是列出给定字符串的全部置换字符串然后再一一比对,这样肯定会超时。

根据题目给出的置换的概念和样例可以知道几个条件:

  1. 两个字符串长度相同。
  2. 每个字符串中的各个字符数量相同。

因此,可以直接对比两个字符串的长度、每个字符的出现次数,故代码如下:

代码:

import java.util.HashMap;
import java.util.Map;
public class Solution {
/**
* @param A a string
* @param B a string
* @return a boolean
*/
public static boolean stringPermutation(String A, String B) {
// Write your code here
if (A.equals(B)) {
return true;
}
if (A.length() == B.length()) {
return mapCompare(charCount(A), charCount(B));
}
return false;
}
// 得到字符串各个字符的出现次数
public static Map<Character, Integer> charCount(String str) {
Map<Character, Integer> map = new HashMap<>();
char[] arr = str.toCharArray();
for (char item : arr) {
if (map.containsKey(item)) {
Integer num = map.get(item);
num += 1;
map.put(item, num);
} else {
map.put(item, 1);
}
}
return map;
}
// 比较两个map
public static boolean mapCompare(Map<Character, Integer> map1, Map<Character, Integer> map2) {
if (map1.size() != map2.size()) {
return false;
}
for (Character c : map1.keySet()) {
try {
if (map1.get(c) != map2.get(c)) {
return false;
}
} catch (NullPointerException e) {
// 说明map2中没有map1中的某个字符
return false;
}
}
return true;
}
}

【LintCode·容易】字符串置换的更多相关文章

  1. LintCode-211.字符串置换

    字符串置换 给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换. 置换的意思是,通过改变顺序可以使得两个字符串相等. 样例 "abc" 为 "cb ...

  2. lintcode:字符串置换

    题目 给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换. 置换的意思是,通过改变顺序可以使得两个字符串相等. 样例 "abc" 为 "cba&q ...

  3. HihoCoder - 1801 :剪切字符串 (置换与逆序对)

    Sample Input 6 5 11 Sample Output 6 小Hi有一个长度为N的字符串,这个字符串每个位置上的字符两两不同.现在小Hi可以进行一种剪切操作: 选择任意一段连续的K个字符, ...

  4. lintcode :同构字符串

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  5. lintcode :旋转字符串

    题目: 旋转字符串 给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 样例 对于字符串 "abcdefg". offset=0 => "abcdef ...

  6. LintCode翻转字符串问题 - python实现

    题目描述:试实现一个函数reverseWords,该函数传入参数是一个字符串,返回值是单词间做逆序调整后的字符串(只做单词顺序的调整即可). 例如:传入参数为"the sky is blue ...

  7. LintCode——交叉字符串

    描述:给出三个字符串:s1.s2.s3,判断s3是否由s1和s2交叉构成. 样例:s1 = "aabcc" s2 = "dbbca" - 当 s3 = &quo ...

  8. LintCode——旋转字符串

    描述:给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 样例:对于字符串 "abcdefg"     offset=0 => "abcdefg&qu ...

  9. [LintCode]转换字符串到整数

    问题描述: 实现atoi这个函数,将一个字符串转换为整数.如果没有合法的整数,返回0.如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-21 ...

随机推荐

  1. ASP.NET Core 2.0 in Docker on Windows Container

    安装Docker for Windows https://store.docker.com/editions/community/docker-ce-desktop-windows 要想将一个ASP. ...

  2. Java多线程编程核心技术

    Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...

  3. servlet的运行工作

    我是一个刚学几天的小白,写得不好,如果哪个地方有错误,欢迎你们指出. 在服务器端,我用的是Tomcat作为Servlet 容器,在容器中有一个Servlet接口,你编写一个servlet类放在Tomc ...

  4. swift之函数式编程(四)

    文章内容来自<Functional Programing in Swift>,具体内容请到书中查阅 Map, Filter, Reduce Functions that take func ...

  5. <ul>标签设计简单导航栏

    当我们刚开始学习html/css的时候,对于padding .float.行内元素.块级元素用起来可能会混淆,但是呢我们可以通过一个简单的nav案例来清楚各自具体作用. 1.首先我们创建一个大的容器, ...

  6. 四、MVC简介

    一.高内聚.低耦合 大学的时候,上过一门叫<软件工程>的课程,课程中讲到了耦合,解耦等相关的词汇,当时很懵懂,不解其意. 耦合:是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影 ...

  7. hadoop2.6环境中部署hive1.2.2的错误

    1.hive配置遇到的问题( Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D) 解决 ...

  8. 爆炸快求1~n有多少素数

    这个求一千亿以内的素数大约用6780ms #include <stdio.h> #include <iostream> #include <string.h> #i ...

  9. 【转载】XSS学习笔记

    XSS的分类 非持久型 非持久型XSS也称反射型XSS.具体原理就是当用户提交一段代码的时候,服务端会马上返回页面的执行结果.那么当攻击者让被攻击者提交一个伪装好的带有恶意代码的链接时,服务端也会立刻 ...

  10. mapbox-gl象形文字字体glyph生成

    简介 mapbox-gl可以对文字显示各种字体(依赖ttf文件),内部采用的是读取protobuf文件 环境条件 硬件:mac.网络 软件:nodejs.npm 创建mapbox-gl可用的字体pro ...