实现一个算法,确定一个字符串的所有字符是否全部相同?
最想想到的方法是通过比较该字符串的每一个字符,算法的时间复杂度为0(n2)次。
另一种办法是可以利用set数据结构来实现,因为在set中不允许存在重复的字符。有一个有意思的地方是在进行判断前可以先判断字符串的长度,如果字符串的长度大于256,那么我们可以肯定该字符串中肯定有重复的字符。
Python代码实现如下:
a = "11fdwqdgf5hg56gfwdqwsdqwd"; #采用set的方法 def judge(): t = set(a); N = len(a); if(t == N): return ('TRUE'); else: print(t); return ('FALSE'); #比较字符串中的每一个字符 def judge2(): N = len(a); for i in range(N): s = a[i]; for j in range(i,N,1): if(s == a[j]): return ('FALSE'); return "true" if __name__ == "__main__": print(judge()); print(judge2());
C++代码:
bool judge(const string str){ vector<bool> char_set(256,false); for (int i = 0;i<str.length();i++){ int val = str[i]; cout<<"val:"<<char_set[val]<<endl; if(char_set[val]){ return false; }else{ char_set[val] = true; } } return true; }
Java代码:
public boolean judge(final String str){ if (str.length() > 256){ return false; }else{ boolean[] char_set = new boolean[256]; for (int i= 0;i<str.length();i++){ int val = str.charAt(i); if (char_set[val]){ return false; } char_set[val] = true; } } return true; }