[CareerCup] 1.3 Permutation String 字符串的排列

简介:

1.3 Given two strings, write a method to decide if one is a permutation of the other.

这道题给定我们两个字符串,让我们判断一个是否为另一个的全排列字符串。在LeetCode中,关于排列的题有如下几道,Permutation Sequence 序列排序Permutations 全排列, Permutations II 全排列之二 和 Next Permutation 下一个排列。这道题跟它们比起来,算是很简单的了。我们先来看一种O(n)的解决方法,跟之前那道1.1 Unique Characters of a String 字符串中不同的字符 使用的方法相同,还是用整型数组来代替哈希表,首先遍历一遍s1中的字符,将其对应位置增1,然后再遍历s2,将其对应位置减1,如果此时减成了负数,说明s2和s1的字符及其数量不完全相等,返回false。若s2遍历完成,返回true。代码如下:

class Solution {
public:
    bool isPermutation(string s1, string s2) {
        if (s1.size() != s2.size()) return false;
        int m[256] = {0};
        for (int i = 0; i < s1.size(); ++i) ++m[s1[i]];
        for (int i = 0; i < s2.size(); ++i) {
            --m[s2[i]];
            if (m[s2[i]] < 0) return false; 
        }
        return true;
    }
};

当然如果不考虑运行效率的话,也可以分别对两个字符串进行排序,排序后的两个字符串如果完全相等则返回true,反之返回false。代码如下:

class Solution {
public:
    bool isPermutation(string s1, string s2) {
        if (s1.size() != s2.size()) return false;
        sort(s1.begin(), s1.end());
        sort(s2.begin(), s2.end());
        return s1 == s2;
    }
};

本文转自博客园Grandyang的博客,原文链接:字符串的排列[CareerCup] 1.3 Permutation String ,如需转载请自行联系原博主。

相关文章
|
3月前
|
安全 Java API
【Java字符串操作秘籍】StringBuffer与StringBuilder的终极对决!
【8月更文挑战第25天】在Java中处理字符串时,经常需要修改字符串,但由于`String`对象的不可变性,频繁修改会导致内存浪费和性能下降。为此,Java提供了`StringBuffer`和`StringBuilder`两个类来操作可变字符串序列。`StringBuffer`是线程安全的,适用于多线程环境,但性能略低;`StringBuilder`非线程安全,但在单线程环境中性能更优。两者基本用法相似,通过`append`等方法构建和修改字符串。
64 1
|
5天前
|
索引 Python
String(字符串)
String(字符串)。
12 3
|
27天前
|
NoSQL Redis
Redis 字符串(String)
10月更文挑战第16天
37 4
|
1月前
|
canal 安全 索引
(StringBuffer和StringBuilder)以及回文串,字符串经典习题
(StringBuffer和StringBuilder)以及回文串,字符串经典习题
33 5
|
1月前
|
存储 JavaScript 前端开发
JavaScript 字符串(String) 对象
JavaScript 字符串(String) 对象
43 3
|
2月前
|
存储 C++
C++(五)String 字符串类
本文档详细介绍了C++中的`string`类,包括定义、初始化、字符串比较及数值与字符串之间的转换方法。`string`类简化了字符串处理,提供了丰富的功能如字符串查找、比较、拼接和替换等。文档通过示例代码展示了如何使用这些功能,并介绍了如何将数值转换为字符串以及反之亦然的方法。此外,还展示了如何使用`string`数组存储和遍历多个字符串。
|
3月前
|
C# 开发者 UED
WPF开发者必备秘籍:深度解析文件对话框使用技巧,打开与保存文件原来如此简单!
【8月更文挑战第31天】在WPF应用开发中,文件操作是常见需求。本文详细介绍了如何利用`Microsoft.Win32`命名空间下的`OpenFileDialog`和`SaveFileDialog`类来正确实现文件打开与保存功能。通过示例代码展示了如何设置文件过滤器、初始目录等属性,并使用对话框进行文件读写操作。正确使用文件对话框能显著提升用户体验,使应用更友好易用。
78 0
|
3月前
|
API C# 开发者
WPF图形绘制大师指南:GDI+与Direct2D完美融合,带你玩转高性能图形处理秘籍!
【8月更文挑战第31天】GDI+与Direct2D的结合为WPF图形绘制提供了强大的工具集。通过合理地使用这两种技术,开发者可以创造出性能优异且视觉效果丰富的WPF应用程序。在实际应用中,开发者应根据项目需求和技术背景,权衡利弊,选择最合适的技术方案。
148 0
|
3月前
|
存储 JSON NoSQL
揭秘Redis字符串String的隐藏技能!从基础到进阶,让你的数据存储操作秒变高大上!
【8月更文挑战第24天】Redis中的字符串类型作为其基石,不仅能够存储从简单文本到复杂格式如JSON的各种数据,还能通过多样化的命令实现包括但不限于自增自减、设置过期时间等高级功能,极大提升了其实用性和灵活性。例如,使用`SET`命令可添加或更新键值对,`GET`获取值,`DEL`删除键;同时,`INCR`和`DECR`支持对整数值的原子性增减操作,非常适合实现计数器等功能;通过`EXPIRE`命令设置过期时间,则适用于需要限时存储的应用场景。尽管名为“字符串”,但实际上还可存储图片、音频文件的Base64编码等形式的数据,为开发者提供了强大而灵活的工具。
48 0
|
3月前
|
存储 Java