1. 程式人生 > 實用技巧 >小米筆試(09-15)

小米筆試(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;
}

希望雷神給個面試機會吧,許願許願~