程序员面试金典--题目解析-1.1 确定一个字符串的所有字符是否相同

本文介绍了三种判断字符串中所有字符是否相同的方法:逐一比较字符、排序后比较相邻字符及使用ASCII映射数组。通过示例代码展示了每种方法的具体实现,并提供了测试用例验证其正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 题目:

确定一个字符串的所有字符是否相同?

1)可以使用额外的数据结构

2)不使用额外的数据结构


解法:

1、将字符串中的每一个字符和其余字符进行比较,时间复杂度O(n^2) 空间复杂度O(1)

代码如下:

  1. public static boolean isUniqueChars(String str){  
  2.         for(int i=0;i<str.length();i++){  
  3.             for(int j=i+1;j<str.length();j++){  
  4.                 if(str.charAt(i)==str.charAt(j))  
  5.                     return false;  
  6.             }  
  7.         }  
  8.         return true;  
  9.     }  

2、将字符串进行排序,然后线性检查其中有无相邻字符串完全相同的情况。

  1. public static boolean isUniqueChars2(String str){  
  2.         char[] newStr = str.toCharArray();  
  3.         Arrays.sort(newStr);  
  4.   
  5.         for(int i=0;i < newStr.length-1;i++){  
  6.             if(newStr[i] == newStr[i+1])  
  7.                 return false;  
  8.         }  
  9.         return true;  
  10. }  


3、假设使用的字符集是ASCII,ASCII只有256个字符,构建一个boolean型数组,数组长度是256,字符串的每一位字符对应ASCII中的一个字符,根据这个字符确定要存入的boolean数组位置,并置为true,若有相同字符,判断下如果该字符对应的位置已经为true,则存在相同字符。

  1. public static boolean isUniqueChars3(String str){  
  2.         if(str.length() > 256return false;  
  3.           
  4.         boolean[] char_bool = new boolean[256];  
  5.         for(int i=0;i<str.length();i++){  
  6.             int val = str.charAt(i);  
  7.             if(char_bool[val] == true)  
  8.                 return false;  
  9.             char_bool[val] = true;  
  10.         }  
  11.         return true;  
  12.     }  


测试用例:

  1. @Test  
  2.     public void test() {  
  3.         String str1 = "";  
  4.         String str1_1 = "   ";  
  5.         String str2 = "1";  
  6.         String str3 = "11";  
  7.         String str4 = "qwe";  
  8.         String str5 = ",";  
  9.         System.out.println(str1.toString() + ":" +StringUtil.isUniqueChars(str1));  
  10.         System.out.println(str1.toString() + ":" +StringUtil.isUniqueChars2(str1));  
  11.         System.out.println(str1.toString() + ":" +StringUtil.isUniqueChars3(str1));  
  12.         System.out.println(str1_1.toString() + ":" +StringUtil.isUniqueChars(str1_1));  
  13.         System.out.println(str1_1.toString() + ":" +StringUtil.isUniqueChars2(str1_1));  
  14.         System.out.println(str1_1.toString() + ":" +StringUtil.isUniqueChars3(str1_1));  
  15.         System.out.println(str2.toString() + ":" +StringUtil.isUniqueChars(str2));  
  16.         System.out.println(str2.toString() + ":" +StringUtil.isUniqueChars2(str2));  
  17.         System.out.println(str2.toString() + ":" +StringUtil.isUniqueChars3(str2));  
  18.         System.out.println(str3.toString() + ":" +StringUtil.isUniqueChars(str3));  
  19.         System.out.println(str3.toString() + ":" +StringUtil.isUniqueChars2(str3));  
  20.         System.out.println(str3.toString() + ":" +StringUtil.isUniqueChars3(str3));  
  21.         System.out.println(str4.toString() + ":" +StringUtil.isUniqueChars(str4));  
  22.         System.out.println(str4.toString() + ":" +StringUtil.isUniqueChars2(str4));  
  23.         System.out.println(str4.toString() + ":" +StringUtil.isUniqueChars3(str4));  
  24.         System.out.println(str5.toString() + ":" +StringUtil.isUniqueChars(str5));  
  25.         System.out.println(str5.toString() + ":" +StringUtil.isUniqueChars2(str5));  
  26.         System.out.println(str5.toString() + ":" +StringUtil.isUniqueChars3(str5));  
  27.     } 


打印结果:

: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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值