2022-8-21 每日一题+简单模拟
给你一个字符串 sentence
作为句子并指定检索词为 searchWord
,其中句子由若干用 单个空格 分隔的单词组成。请你检查检索词 searchWord
是否为句子 sentence
中任意单词的前缀。
如果 searchWord
是某一个单词的前缀,则返回句子 sentence
中该单词所对应的下标(下标从 1 开始)。如果 searchWord
是多个单词的前缀,则返回匹配的第一个单词的下标(最小下标)。如果 searchWord
不是任何单词的前缀,则返回 -1
。
字符串 s
的 前缀 是 s
的任何前导连续子字符串。
1 class Solution { 2 public int isPrefixOfWord(String sentence, String searchWord) { 3 String[] arr=sentence.split(" "); 4 int index=1; 5 for (String s:arr){ 6 if (isPrefix(searchWord,s)){ 7 return index; 8 } 9 index++; 10 } 11 return -1; 12 } 13 14 public boolean isPrefix(String s,String s1){ 15 if (s.length()>s1.length()) return false; 16 int index=0; 17 while (index<s.length()){ 18 if (s.charAt(index)!=s1.charAt(index)) return false; 19 index++; 20 } 21 return true; 22 } 23 }
思路:分割单词在判断。
剑指 Offer II 058. 日程表
请实现一个 MyCalendar
类来存放你的日程安排。如果要添加的时间内没有其他安排,则可以存储这个新的日程安排。
MyCalendar
有一个 book(int start, int end)
方法。它意味着在 start 到 end 时间内增加一个日程安排,注意,这里的时间是半开区间,即 [start, end)
, 实数 x
的范围为, start <= x < end
。
当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生重复预订。
每次调用 MyCalendar.book
方法时,如果可以将日程安排成功添加到日历中而不会导致重复预订,返回 true
。否则,返回 false
并且不要将该日程安排添加到日历中。
请按照以下步骤调用 MyCalendar
类: MyCalendar cal = new MyCalendar();
MyCalendar.book(start, end)
1 class MyCalendar { 2 List<int[]> list; 3 public MyCalendar() { 4 list=new ArrayList<>(); 5 } 6 7 public boolean book(int start, int end) { 8 for (int[] x:list){ 9 if (conflict(x,start,end)) return false; 10 } 11 list.add(new int[]{start,end}); 12 return true; 13 } 14 15 public boolean conflict(int[] x,int s,int e){ 16 if (x[1]<=s||x[0]>=e) return false; 17 return true; 18 } 19 } 20 21 /** 22 * Your MyCalendar object will be instantiated and called as such: 23 * MyCalendar obj = new MyCalendar(); 24 * boolean param_1 = obj.book(start,end); 25 */
思路:暴力解法,Treeset应用,需要一个数据结构能够保持元素排序和支持快速插入,可以用TreeSet 来构建。
学习一下Treeset的函数。first,last,ceiling,floor,lower,up等等。