题目描述
描述:实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
输入: s = "leetcode"
输出: false
输入: s = "abc"
输出: true
1、0 <= len(s) <= 100 ;
2、s[i]仅包含小写字母;
3、如果你不使用额外的数据结构,会很加分;
解题思路
思路1:最直观的想法是,使用uset,遍历一遍字符串s,如果当前元素s[i]在uset中找到,则直接返回false,反之将s[i]插入uset中,如果遍历结束都没找到,则表明字符串中无重复元素,则返回true。
bool isUnique(string astr) {
int n=astr.size();
unordered_set<int> uset;
for(int i=0;i<n;i++)
{
if(uset.find(astr[i])!=uset.end())
return false;
else
uset.emplace(astr[i]);
}
return true;
}
思路2:题目中表明,如果不使用额外的数据结构,那么我们就要从哈希法转换到最初的两层循环上。外层循环表示当前元素,内层循环表示从当前元素后一个元素开始的剩余元素,每一轮如此比较,如果存在相同则返回false,反之如果两层循环遍历结束都没找到,则表明字符串中无重复元素,则返回true。
bool isUnique(string astr) {
int n=astr.size();
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(astr[i]==astr[j])
return false;
}
}
return true;
}
总结:有时候一题多解,要按照题目要求来进行求解。有时候在题目训练下,我们解题往往趋于最优化,但有时最优化不一定是我们的题目要求。