给定一个字符串string iniString,请返回一个bool值,True代表字符串的所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符且不允许使用额外的存储结构,字符串的长度小于等于3000。
测试样例:
"aeiou"
返回:True
"BarackObama"
返回:False
class Different { template<typename T> bool quick_check(T &arr, int size, int begin, int end) { int i = begin, j = end-1; auto key = arr[i]; while (i < j) { while (i<j && arr[j]>=key) j--; arr[i] = arr[j]; while (i<j && arr[i]<=key) i++; arr[j] = arr[i]; } arr[i] = key; if (i && arr[i]==arr[i-1]) return false; if (i+1<size && arr[i]==arr[i+1]) return false; if (begin >= end-1) return true; return quick_check(arr, size, begin, i) && quick_check(arr, size, i+1, end); } public: bool checkDifferent(string &iniString) { // write code here return quick_check(iniString, iniString.size(), 0, iniString.size()); } };
import java.util.*;
public class Different {
public boolean checkDifferent(String str) {
//使用异或,因为让支持ASCII所以判断下长度,长度超了,肯定重复
if(str.length()>256)return false;
for (int i = 0;i<str.length();i++) {
for (int j = i+1;j<str.length();j++) {
if ((str.charAt(i)^str.charAt(j))==0)
return false;
}
}
return true;
}
}
class Different { public: bool checkDifferent(string iniString) { int a[256] = {0}; for(int i = 0; i < iniString.size(); i ++) { //cout<<i<<" "<<(int)(iniString[i])<<endl;//无法通过转义的样例 int x = iniString[i]; a[x] ++; if(a[x] > 1) return false; } return true; } };
# -*- coding:utf-8 -*- class Different: def checkDifferent(self, iniString): for i in range(len(iniString)): for j in range(i+1,len(iniString)): if iniString[i]==iniString[j]: return False return True
class Different { public: bool checkDifferent(string iniString) { // write code here sort(iniString.begin(), iniString.end()); if(unique(iniString.begin(), iniString.end()) == iniString.end()) return true; else return false; } };很少贴代码出来,这题习惯性的看了讨论区,没有看到比较好的,贴出来和大家一起探讨。
import java.util.*; public class Different { public boolean checkDifferent(String iniString) { // write code here boolean[] charset = new boolean[65536]; for(int i = 0;i < iniString.length(); i++){ int val = iniString.charAt(i); if(charset[val]){ return false; } charset[val] = true; } return true; } }
import java.util.*; public class Different { public boolean checkDifferent(String iniString) { int iniLength = iniString.length(); char[] charArray = iniString.toCharArray(); TreeSet<Character> after = new TreeSet<Character>(); for(int i = 0;i<charArray.length;i++){ after.add(charArray[i]); } int afterLength = after.size(); if(afterLength==iniLength) return true; return false; } }
class Different { public: bool checkDifferent(string iniString) { // write code here for(size_t i = 0; i < iniString.size(); i++) { for(size_t j = 0; j < iniString.size(); j++) { if((iniString[i] == iniString[j]) && (i != j)) return false; } } return true; } };
//这道题理解起来并不是很难 public static boolean checkDifferent(String iniString) { //先将字符串转换成字符数组 char[] str = iniString.toCharArray(); //定义跳出二层循环条件 boolean find = false; for (int i = 0; i < str.length && !find; i++) { for (int j = i+1; j < str.length; j++) { //当发现相同字符时,修改条件,直接跳出二层循环 if (str[i] == str[j]) { find = true; break; } } } //返回查找结果 return !find; }
class Different { public: bool checkDifferent(string iniString) { // write code here sort(iniString.begin(),iniString.end()); for(int i=0;i<iniString.size();i++) { if(iniString[i]==iniString[i-1]) return false; } return true; } };
import java.util.*; public class Different { public boolean checkDifferent(String iniString) { for (int i=0; i<iniString.length(); i++) for (int j=i+1; j<iniString.length(); j++){ if (iniString.charAt(i) == iniString.charAt(j)) return false; } return true; // write code here } }