leetcode
1. 判断字符是否唯一
- set / map存一下,如果有重复,那么set长度小于astr长度,但是题目表示最好不用数据结构
set<char>st;
for(auto c:astr){st.insert(c);}
- 直接排序字符串,那么有重复的一定是相邻的
- 暴力for循环,但是没意义:其实string是基于char类型的模板类
使用String.toCharArray()将String转换为char数组:char []array=astr.toCharArray();
- 显然这一题的目的是考位运算,位运算的解法:
ASCII 码字符个数为 128 个(注意,扩展的 ASCII 不是128个字符,有256个),返回指定索引处的char值,字符变量之间的相减就是对应的ASCII对应相减。
方法:获取字符串的每一位,然后将每一个字符的ASCII码存入数组的对应下标位置,如果数组的任何一位出现大于1的值,则表示某一位字母出现了多次,表示字符串有相同的字母出现
**注意:**int 数组必须初始化,否则里面的值是未知的,不如直接用vector,当然,使用vector更节省空间,不用char数组也是因为初始化问题。
c下面的绿色波浪线,提示c是未被初始化的
ASCII码解法,代码如下:
bool isUnique(string astr) {
if(astr.size()<2)
{
return true;
}else if(astr.size()>26)
{
return false;
}else{
vector<char> c(26);
for(int i=0;i<astr.size();i++)
{
c[astr[i]-'a'] = c[astr[i]-'a']+1;
if(c[astr[i]-'a']>1)
{
return false;
}
}
return true;
}
}