【LeetCode】面试题思路记录---字符串

本文深入解析了多个字符串处理算法,包括判定字符是否唯一、判断字符重排、URL化、回文排列及字符串压缩等,提供了多种实现方法如暴力循环、哈希、位运算等,适合算法初学者和面试备考者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试题01.01.判定字符是否唯一

实现一个算法,确定一个字符串s的所有字符是否全都不同。
示例1:

输入: s = "leetcode"
输出: false

示例2:

输入: s = "abc"
输出: true

|= 即 a=a|b
|运算的规则是当两个位都为0时,结果为0,否则为1;

方法一:

双重暴力循环

方法二:

set哈希

方法三:

bool数组标识

方法四:

位运算
借助int类型的变量来代替长度为26的bool数组。

面试题01.02.判断是否互为字符重排

给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

示例 1:

输入: s1 = "abc", s2 = "bca"
输出: true 

示例 2:

输入: s1 = "abc", s2 = "bad"
输出: false

我的理解就是判断两个字符串中所包含的字符是否相同;
所以直接使用map来存储,或者set;
两个字符串分别循环,第一个添加,第二个删除,最后判断map中的值是否都为空

面试题01.03.URL化

URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)

示例1:

输入:"Mr John Smith    ", 13
 输出:"Mr%20John%20Smith"

示例2:

 输入:"               ", 5
 输出:"%20%20%20%20%20"

这道题我觉得是之前字符串替换的变式,多了对最后空格的判断;
所以先将空格的数量记录下来,再用数学关系控制新数组的长度;

面试题01.04回文排列

给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。

回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。

回文串不一定是字典当中的单词。
示例1:

输入:"tactcoa"
输出:true(排列有"tacocat""atcocta",等等)

首先分析回文串的特征,特征就是这些字符的数量是偶数或者只有一个奇数;
使用散列表的思想将字符的个数记录,这里可以直接使用new int【128】;
然后当出现一个奇数的时候,判断再有没有奇数,如果有则是错的。

面试题01.06.字符串压缩

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。

示例1:

输入:"aabcccccaaa"
 输出:"a2b1c5a3"

示例2:

 输入:"abbccd"
 输出:"abbccd"

解释:“abbccd"压缩后为"a1b2c2d1”,比原字符串长度更长。

这道题算是很容易理解,我觉得就用双指针解题即可;
i控制字符,j控制个数
i从0开始走,j=i,如果下一个字符相同就j++;不相同则i=j;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值