小米笔试(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;
}

希望军哥给个面试机会吧,许愿许愿~

#小米##笔试题型#
全部评论
第二题  public static void main(String[] args) {         Scanner scanner = new Scanner(System.in);         String line = scanner.nextLine();         StringBuilder sb = new StringBuilder();         for (int i = 0; i < line.length(); i++) {             if (sb.indexOf(line.charAt(i) + "") == -1) {                 sb.append(line.charAt(i));             }         }         System.out.println(sb.toString());     }
2 回复 分享
发布于 2020-09-15 21:20
多行输入才是难点好吧😂
1 回复 分享
发布于 2020-09-15 21:31
我是加了去掉空格才a的
点赞 回复 分享
发布于 2020-09-15 21:55
加上了多行输入还是不行。。。。
点赞 回复 分享
发布于 2020-09-15 21:49
想请问楼主,第一题的输入怎么处理c++的版本
点赞 回复 分享
发布于 2020-09-15 21:37

相关推荐

不愿透露姓名的神秘牛友
2025-12-17 16:48
今天九点半到公司,我跟往常一样先扫了眼电脑,屁活儿没有。寻思着没事干,就去蹲了个厕所,回来摸出手机刷了会儿。结果老板刚好路过,拍了我一下说上班别玩手机,我吓得赶紧揣兜里。也就过了四十分钟吧,我的直属领导把我叫到小隔间,上来就给我一句:“你玩手机这事儿把老板惹毛了,说白了,你可以重新找工作了,等下&nbsp;HR&nbsp;会来跟你谈。”&nbsp;我当时脑子直接宕机,一句话都没憋出来。后面&nbsp;HR&nbsp;找我谈话,直属领导也在旁边。HR&nbsp;说我这毛病不是一次两次了,属于屡教不改,不光上班玩手机,还用公司电脑看论文、弄学校的事儿。我当时人都傻了,上班摸鱼是不对,可我都是闲得发慌的时候才摸啊!而且玩手机这事儿,从来没人跟我说过后果这么严重,更没人告诉我在公司学个习也算犯错!连一次口头提醒都没有,哪儿来的屡教不改啊?更让我膈应的是,昨天部门刚开了会,说四个实习生里留一个转正,让大家好好表现。结果今天我就因为玩手机被开了。但搞笑的是,开会前直属领导就把我叫去小会议室,明明白白告诉我:“转正这事儿你就别想了,你的学历达不到我们部门要求,当初招你进来也没打算给你这个机会。”合着我没入贵厂的眼是吧?可我都已经被排除在转正名单外了,摸个鱼至于直接把我开了吗?真的太离谱了!
rush$0522:转正名单没进,大概率本来就没打算留你
摸鱼被leader发现了...
点赞 评论 收藏
分享
牛至超人:哈工大已经很棒了,不需要加括号了,然后咋没有实习经历呢?火速趁寒假整一段实习,导师不让就狠狠肘击
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务