找出一个字符串中第一个无重复字符

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 10:52   101   0
/**
 * 编写一个高效率函数来找出一个字符串中第一个无重复字符.
 * 例如:”total”中的o,”teeter”中的r.要求算法效率优于O(n2).函数调用模型如下:
 * Public static Character FirstNoRepeated(String str);
 */
public class FirstNoRepeated {
 public static void main(String[] args) {
  
  System.out.println(FirstNoRepeated("total"));
  
  System.out.println(FirstNoRepeated1("teeter"));
  
 }
 /**
  * 利用map记录字符串中每个字符的个数
  * @param str
  * @return
  */
 public static Character FirstNoRepeated(String str){
  Map<Character,Integer> map = new HashMap<Character,Integer>();
  for(int i=0; i<str.length();i++){
   if(!map.containsKey(str.charAt(i))){
    map.put(str.charAt(i), 1);
   }else{
    Integer k = map.get(str.charAt(i));
    map.put(str.charAt(i), ++k);
   }
  }
  //按字符串的顺序返回首次出现的字符
  for(int i = 0 ; i < str.length(); i++){
   if(map.get(str.charAt(i)) == 1){
    return str.charAt(i);
   }
  }
  return null;
 }
 /**
  * 方式一:双重循环
  * @param str
  * @return
  */
 public static Character FirstNoRepeated1(String str){
  int count = 0;
  char c;
  //拿出每位中的每个字符与原字符串中的每个字符进行比较并记录出现的次数
  for(int i=0;i<str.length();i++){
   c = str.charAt(i);
   for(int j=0;j<str.length();j++){
    char cc = str.charAt(j);
    if(c == cc){
     count ++;
    }
   }
   //返回首次出现的第一个字符
   if(count == 1){
    return c;
   }
   count = 0;
  }
  return null;
  
 }
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP