1.1 题目:
确定一个字符串的所有字符是否相同?
1)可以使用额外的数据结构
2)不使用额外的数据结构
解法:
1、将字符串中的每一个字符和其余字符进行比较,时间复杂度O(n^2) 空间复杂度O(1)
代码如下:
- public static boolean isUniqueChars(String str){
- for(int i=0;i<str.length();i++){
- for(int j=i+1;j<str.length();j++){
- if(str.charAt(i)==str.charAt(j))
- return false;
- }
- }
- return true;
- }
2、将字符串进行排序,然后线性检查其中有无相邻字符串完全相同的情况。
- public static boolean isUniqueChars2(String str){
- char[] newStr = str.toCharArray();
- Arrays.sort(newStr);
- for(int i=0;i < newStr.length-1;i++){
- if(newStr[i] == newStr[i+1])
- return false;
- }
- return true;
- }
3、假设使用的字符集是ASCII,ASCII只有256个字符,构建一个boolean型数组,数组长度是256,字符串的每一位字符对应ASCII中的一个字符,根据这个字符确定要存入的boolean数组位置,并置为true,若有相同字符,判断下如果该字符对应的位置已经为true,则存在相同字符。
- public static boolean isUniqueChars3(String str){
- if(str.length() > 256) return false;
- boolean[] char_bool = new boolean[256];
- for(int i=0;i<str.length();i++){
- int val = str.charAt(i);
- if(char_bool[val] == true)
- return false;
- char_bool[val] = true;
- }
- return true;
- }
测试用例:
- @Test
- public void test() {
- String str1 = "";
- String str1_1 = " ";
- String str2 = "1";
- String str3 = "11";
- String str4 = "qwe";
- String str5 = ",";
- System.out.println(str1.toString() + ":" +StringUtil.isUniqueChars(str1));
- System.out.println(str1.toString() + ":" +StringUtil.isUniqueChars2(str1));
- System.out.println(str1.toString() + ":" +StringUtil.isUniqueChars3(str1));
- System.out.println(str1_1.toString() + ":" +StringUtil.isUniqueChars(str1_1));
- System.out.println(str1_1.toString() + ":" +StringUtil.isUniqueChars2(str1_1));
- System.out.println(str1_1.toString() + ":" +StringUtil.isUniqueChars3(str1_1));
- System.out.println(str2.toString() + ":" +StringUtil.isUniqueChars(str2));
- System.out.println(str2.toString() + ":" +StringUtil.isUniqueChars2(str2));
- System.out.println(str2.toString() + ":" +StringUtil.isUniqueChars3(str2));
- System.out.println(str3.toString() + ":" +StringUtil.isUniqueChars(str3));
- System.out.println(str3.toString() + ":" +StringUtil.isUniqueChars2(str3));
- System.out.println(str3.toString() + ":" +StringUtil.isUniqueChars3(str3));
- System.out.println(str4.toString() + ":" +StringUtil.isUniqueChars(str4));
- System.out.println(str4.toString() + ":" +StringUtil.isUniqueChars2(str4));
- System.out.println(str4.toString() + ":" +StringUtil.isUniqueChars3(str4));
- System.out.println(str5.toString() + ":" +StringUtil.isUniqueChars(str5));
- System.out.println(str5.toString() + ":" +StringUtil.isUniqueChars2(str5));
- System.out.println(str5.toString() + ":" +StringUtil.isUniqueChars3(str5));
- }
打印结果:
:true
:true
:true
:false
:false
:false
1:true
1:true
1:true
11:false
11:false
11:false
qwe:true
qwe:true
qwe:true
,:true
,:true
,:true