zoukankan      html  css  js  c++  java
  • LeetCode389-找不同(查找)

    查找问题,最先想到Map和Set

    一开始觉得用set即可,因为把s的内容存进去,对t进行遍历,不在里面的肯定就是新增加的了

        public char findTheDifference(String s, String t) {
            Set<Character> set = new HashSet<>();
    
            int lenS = s.length();
            int lenT = t.length();
    
            for(int i=0;i<lenS;i++){
                set.add(s.charAt(i));
            }
    
            char result = ' ';
    
            for (int i=0;i<lenT;i++){
                if(!set.contains(t.charAt(i))){
                    result = t.charAt(i);
                    break;
                }
            }
    
            return result;
        }

    但是没有考虑到,相同字母的问题

    用HashMap,把每个字母存进去,然后存对应的值。

    1、如果t中的某个字母不在Map中,他就是多出来的。

    2、如果t中的字母,在Map中,但是个数不一样,他就是多出来的。

    用Map麻烦,因为是24个字母,用数组即可

    首先确认两件事情

    a的数值是97,int数组默认是0

    char c = 'a';
            System.out.println((int)c);//97
    
            int [] ss = new int[24];
            System.out.println(ss[1]);//0

    26个字母,记成24了。。。

    public char findTheDifference(String s, String t) {
            int [] ss = new int[26];
    
            int lenS = s.length();
            int lenT = t.length();
    
            //将s的字符对应的位置++
            for(int i=0;i<lenS;i++){
                ss[(int)s.charAt(i)-97]++;
            }
    
            char result = ' ';
    
            //如果t中有相应的字符,那就--进行抵消
            //如果数组变成负数了,这个位置的字符就是多出来的
            for(int i=0;i<lenT;i++){
    
                int temp = --ss[(int)t.charAt(i)-97];
                if(temp==-1){
                    result = t.charAt(i);
                    break;
                }
    
            }
    
            return result;
        }

    国内leetcode有问题。。

    第一次

    然后同样的代码,第二次

  • 相关阅读:
    暑期学习录
    08管道命名符
    07输入输出重定向
    06grep与find命令详解
    05tar命令详解
    04文件目录管理命令
    03工作目录切换命令与文本文件编辑命令
    02系统状态检测命令
    01常用系统工作命令
    vue2.0细节剖析
  • 原文地址:https://www.cnblogs.com/weizhibin1996/p/9644035.html
Copyright © 2011-2022 走看看