【LintCode·容易】字符串置换
字符串置换
描述:
给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。
置换的意思是,通过改变顺序可以使得两个字符串相等。
样例:
"abc" 为 "cba" 的置换。
"aabc" 不是 "abcc" 的置换。
思路:
误区是列出给定字符串的全部置换字符串然后再一一比对,这样肯定会超时。
根据题目给出的置换的概念和样例可以知道几个条件:
- 两个字符串长度相同。
- 每个字符串中的各个字符数量相同。
因此,可以直接对比两个字符串的长度、每个字符的出现次数,故代码如下:
代码:
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·容易】字符串置换的更多相关文章
- LintCode-211.字符串置换
字符串置换 给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换. 置换的意思是,通过改变顺序可以使得两个字符串相等. 样例 "abc" 为 "cb ...
- lintcode:字符串置换
题目 给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换. 置换的意思是,通过改变顺序可以使得两个字符串相等. 样例 "abc" 为 "cba&q ...
- HihoCoder - 1801 :剪切字符串 (置换与逆序对)
Sample Input 6 5 11 Sample Output 6 小Hi有一个长度为N的字符串,这个字符串每个位置上的字符两两不同.现在小Hi可以进行一种剪切操作: 选择任意一段连续的K个字符, ...
- lintcode :同构字符串
Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...
- lintcode :旋转字符串
题目: 旋转字符串 给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 样例 对于字符串 "abcdefg". offset=0 => "abcdef ...
- LintCode翻转字符串问题 - python实现
题目描述:试实现一个函数reverseWords,该函数传入参数是一个字符串,返回值是单词间做逆序调整后的字符串(只做单词顺序的调整即可). 例如:传入参数为"the sky is blue ...
- LintCode——交叉字符串
描述:给出三个字符串:s1.s2.s3,判断s3是否由s1和s2交叉构成. 样例:s1 = "aabcc" s2 = "dbbca" - 当 s3 = &quo ...
- LintCode——旋转字符串
描述:给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 样例:对于字符串 "abcdefg" offset=0 => "abcdefg&qu ...
- [LintCode]转换字符串到整数
问题描述: 实现atoi这个函数,将一个字符串转换为整数.如果没有合法的整数,返回0.如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-21 ...
随机推荐
- java web 入门级 开发 常用页面调试方法
这里介绍一下Java web 入门级开发中常用的代码调式方法; ( 仅供入门级童靴 参考) ; 工具: chrome 浏览器 (版本越高越好); Java web 入门级开发 主要就是两个方面: ...
- LeetCode 346. Moving Average from Data Stream (数据流动中的移动平均值)$
Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...
- JavaScript--我发现,原来你是这样的JS(再说引用类型,基本包装类型与个体内置对象)
一.介绍 本篇是续上一篇的,引用类型的后篇,本篇主要是说基本包装类型和个体内置对象.如果你能收获一些知识,那我很高兴,很满足,哈哈哈,希望大家能愉快看完.如果你想学好一门技术,要不忘初心,方得始终. ...
- 如何内网搭建NuGet服务器
NuGet 是.NET程序员熟知的给.NET项目自动配置安装library的工具,它可以直接安装开源社区中的各个公用组件,可以说是非常方便.不过,有些时候,公司内部的公用的基础类库,各个项目都有引用, ...
- How to use VisualSVN Server and TortoiseSVN to host your codes and control your codes' version
############################### PART ONE ############################### #1. Introduction of the ...
- C++获取本机IP等信息
运行环境:VS2008,win7,代码来源于MSDN,相关函数可以查看MSDN中的函数定义.. 代码如下: #include <winsock2.h> #include <ws2tc ...
- 树莓派链接WiFi设置
树莓派摆脱网线的束缚 在看这篇文章之前,请确保自己树莓派OS已经正常安装且已经连接网线,然后准备一个无线网卡,开始实现我们的树莓派摆脱网线的束缚吧 ! -_- 一. 安装网卡驱动 1. ...
- POJ3468(线段树 区间修改 lazy-tag)
我的线段树真的没救了......还是多练几道吧....... You have N integers, A1, A2, ... , AN. You need to deal with two kind ...
- Bridging signals(NlogN最长上升子序列)
Bridging signals Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Sequence one
Problem Description Search is important in the acm algorithm. When you want to solve a problem by us ...