• 小米笔试(09-15)


    第一题 有效的括号

    leetcode原题,但我一直80%,后面发现是可以多行输入的,猝。。。

    public static void main(String[] args) {
    	// TODO Auto-generated method stub
    	// 定义辅助栈
    	Stack<Character> stack = new Stack<>();
        
    	Scanner scanner = new Scanner(System.in);
        // 需要处理为多行输入输出
    	String string = scanner.nextLine();
    	boolean flag = false;
    	for(int i = 0; i < string.length(); i++) {
    		if( string.charAt(i) == '(')
    			stack.push(')');
    		else if( string.charAt(i) == '[')
    			stack.push(']');
    		else if (string.charAt(i) == '{') {
    			stack.push('}');
    		}
    		else if (string.charAt(i) == ' '){
    			continue;
    		}
    		else if(stack.empty() || string.charAt(i) != stack.pop()) {
    			flag = true;
    			break;
    		}	
    	}
    	scanner.close();
    	if(!stack.empty() || flag)
    		System.out.println("false");
    	else
    		System.out.println("true");
    }
    
    第二题 去掉重复的字符,只保留第一个

    简单,使用HashMap搞定

    package zr.xiaomi;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner scanner = new Scanner(System.in);
    		String string = scanner.nextLine();
    		Map<Character, Integer> map = new HashMap<Character, Integer>();
    		
    		for(int i = 0; i < string.length(); i++) {
    			if(!map.containsKey(string.charAt(i))) {
    				System.out.print(string.charAt(i));
    				map.put(string.charAt(i), 1);
    			}
    		}
    			
    		scanner.close();
    	}
    }
    

    其实使用HashSet就行了,可能是HashMap用得太多,一上来就想到HashMap

    package zr.xiaomi;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Scanner;
    import java.util.Set;
    
    public class Main {
    
    	public static void main(String[] args) {
    		
    		Scanner scanner = new Scanner(System.in);
    		String string = scanner.nextLine();		
    		Set<Character> set = new HashSet<>();
    		
    		for(int i = 0; i < string.length(); i++) {
    			if(!set.contains(string.charAt(i))) {
    				System.out.print(string.charAt(i));
    				set.add(string.charAt(i));
    			}
    		}			
    		scanner.close();	
    	}
    }
    

    其实C++里面的list也可以搞定,更easy

    int main(int argc, char* argv[])
    {
        string s;
        getchar();
        getline(cin, s);
        list<char> mylist;
    
        for(int i = 0; i < s.size(); i++)
            mylist.push_back(s[i]);
    	
        // 去重(从右边开始,保留第一个)
        mylist.unique();
        for(auto it = mylist.begin(); it != mylist.end(); it++){
            printf("%c", *it);
        }
    
    
        return 0;
    }
    

    希望雷神给个面试机会吧,许愿许愿~

  • 相关阅读:
    RocketMQ(4.8.0)——Broker读写分离机制
    RocketMQ(4.8.0)——Broker消息存储机制
    RocketMQ(4.8.0)——Broker 概述、启动和停止流程
    RocketMQ(4.8.0)——RocketMQ的路由原理
    RocketMQ(4.8.0)——Namesrv 服务
    RocketMQ(4.8.0)——RocketMQ部署拓扑和部署实践
    RocketMQ(4.8.0)——RocketMQ体系架构
    RocketMQ(4.8.0)——消费者最佳实践
    Java丨时间判断谁前谁后
    MySQL丨分页查询
  • 原文地址:https://www.cnblogs.com/flyingrun/p/13675735.html
Copyright © 2020-2023  润新知