[普帝八股文] - offer无情屠夫之热门算法考题(一周一题)

(38) 2024-09-08 20:01:03

本系列主要记录一些有意思以及热门的算法与数据结构考题
难度1~10颗星


7M(18-24)d. 文本内容行列反转

来源: 阿里面试题
难度:6颗星
分享一道阿里面试题,初看挺简单,其实设的坑还挺巧妙滴。

原题如下:
给定一个文本文件in.txt,文件可由不在引号内的换行符划分成多行,
请将文件A中的内容按以下规则处理后输出至文件out.txt:
A.每行行内字符要反转输出,
B.有多行的话,行间次序要反转输出,
c.引号内的内容视为整体,内部不需变化次序。

时间可以自己安排。
先仔细审题 评估 要 哪天几点 能做好发过来

[普帝八股文] - offer无情屠夫之热门算法考题(一周一题) (https://mushiming.com/)  第1张


解题:
这道题很有意思是道开放题,可以自己评估什么时候做好发过去,不要求远程面试过程中当场手写代码。
那这样是不是可以作弊,线下百度或者google搜索答案了? (其实吧~~巧妙的是也搜不到原题)

提示:仔细审题注意这道题引号内 含有换行的情况
'1
2’3’45’6

code:

本周末贴代码 
package test; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.Stack; /** * <p>Title: Solution</p> * <p>Description: * 描述:E:\data * </p> * * @author jinpu.shi * @version v1.0.0 * @since 2022-07-22 20:30 */ public class Solution { public static void main(String[] args) { String crlf = System.getProperty("line.separator"); String flag = "\"'"; String data = getData(); String s1 = reverse(data); System.out.println("整体反转后: " + s1); Stack<String> stack = new Stack<>(); StringBuilder resultList = new StringBuilder(); StringBuilder item = new StringBuilder(); for (int i = 0; i < s1.length(); i++) { String c = String.valueOf(s1.charAt(i)); if (!stack.isEmpty() && stack.peek().equals(c)) { String needReverseItem = stack.pop() + item.toString() + c; String reverseItem = reverse(needReverseItem); resultList.append(reverseItem); item.delete(0, item.length()); } else if (stack.isEmpty() && flag.contains(c)) { String unNeedReverseItem = item.toString(); if (unNeedReverseItem.length() > 0) { resultList.append(unNeedReverseItem); item.delete(0, item.length()); } stack.push(c); } else { item.append(c); } } resultList.append(item.toString()); System.out.println("=============最终输出==============="); System.out.println(resultList.toString().replace("#", crlf)); } private static String reverse(String input) { StringBuilder result = new StringBuilder(input); return result.reverse().toString(); } private static String getData() { File file = new File("E:\\data\\in.txt"); StringBuilder sbf = new StringBuilder(); try (FileReader fileReader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(fileReader)) { String temp; System.out.println("====================输入======================"); while ((temp = bufferedReader.readLine()) != null) { System.out.println(temp); sbf.append(temp).append("#"); } String result = sbf.toString().substring(0, sbf.length() - 1); System.out.println("最终处理为一行数据: " + result); return result; } catch (IOException e) { e.printStackTrace(); return null; } } } 

[普帝八股文] - offer无情屠夫之热门算法考题(一周一题) (https://mushiming.com/)  第2张

Q:你是否有更好性能的解法?


7M(25-31)d. 生产者消费者
难度:5颗星
要求:

  1. 【同步容器】实现一个固定容量的同步容器,拥有take和put方法
  2. 【阻塞调用】当队列容器已满时生产者线程被阻塞,直到队列未满后才可以继续put; 当队列容器为空时,消费者线程被阻塞,直至队列非空时才可以继续take。
  3. 【精准唤醒】实现更加精确控制指定线程的唤醒

code:

本周末贴代码 
THE END

发表回复