【LeetCode】3月16日打卡-Day1

题1 字符串压缩

描述

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
示例1:
输入:“aabcccccaaa”
输出:“a2b1c5a3”
示例2:
输入:“abbccd”
输出:“abbccd”
解释:“abbccd"压缩后为"a1b2c2d1”,比原字符串长度更长。

实现

class Solution {public String compressString(String S) {if(S.length() == 0){return "";}StringBuilder sb = new StringBuilder();char[] chars = S.toCharArray();int index = 0;int count = 0;for(int i = 0; i < S.length()-1; i++){count++;if(chars[i] != chars[i+1]){sb.append(chars[i]).append(count);index = i + 1;count = 0;}} sb.append(chars[index]).append(chars.length - index);String result = sb.toString();return  result.length() < S.length() ? result : S;}
}

笔记

  1. StringBuilder
    在程序开发过程中,我们常常碰到字符串连接的情况,方便和直接的方式是通过"+"符号来实现,但是这种方式达到目的的效率比较低,且每执行一次都会创建一个String对象,即耗时,又浪费空间。使用StringBuilder类就可以避免这种问题的发生。
1append(String str)/append(Char c):字符串连接
System.out.println("StringBuilder:"+strB.append("ch").append("111").append('c'));
//return "StringBuilder:ch111c"2toString():返回一个与构建起或缓冲器内容相同的字符串
System.out.println("String:"+strB.toString());
//return "String:ch111c"3appendcodePoint(int cp):追加一个代码点,并将其转换为一个或两个代码单元并返回this
System.out.println("StringBuilder.appendCodePoint:"+strB.appendCodePoint(2));
//return "StringBuilder.appendCodePoint:ch111c"4setCharAt(int i, char c):将第 i 个代码单元设置为 c(可以理解为替换)
strB.setCharAt(2, 'd');
System.out.println("StringBuilder.setCharAt:" + strB);
//return "StringBuilder.setCharAt:chd11c"5insert(int offset, String str)/insert(int offset, Char c):在指定位置之前插入字符()
System.out.println("StringBuilder.insertString:"+ strB.insert(2, "LS"));
//return "StringBuilder.insertString:chLSd11c"
System.out.println("StringBuilder.insertChar:"+ strB.insert(2, 'L'));
//return "StringBuilder.insertChar:chLLSd11c"6delete(int startIndex,int endIndex):删除起始位置(含)到结尾位置(不含)之间的字符串
System.out.println("StringBuilder.delete:"+ strB.delete(2, 4));
//return "StringBuilder.delete:chSd11c"
  1. 最后的一个字母在for循环中无法append,用index记录该字母的起始位置,字符串长度减去索引位置即是相同字母的长度。

题2

描述

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
示例 1:
输入: “LVIII”
输出: 58
解释: L = 50, V= 5, III = 3.
示例 2:
输入: “MCMXCIV”
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

实现

class Solution {public int romanToInt(String s) {Map<Character,Integer> map = new HashMap<>();map.put('I',1);map.put('V',5);map.put('X',10);map.put('L',50);map.put('C',100);map.put('D',500);map.put('M',1000);int len = s.length();int sum = map.get(s.charAt(len-1));for(int i = len - 2; i >= 0; --i){if(map.get(s.charAt(i)) < map.get(s.charAt(i+1))){sum -= map.get(s.charAt(i));} else{sum += map.get(s.charAt(i));}}return sum;}
}

笔记

  1. Java定义字典: Map<Character,Integer> map = new HashMap<>(),插入操作map.put(a,b),根据键返回字典值map.get(a),返回b。
  2. String类型可以用charAt(index)的方法获取指定位置的元素值。

题3 最长公共前缀

描述

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。

实现

class Solution {public String longestCommonPrefix(String[] strs) {int len = strs.length;if(len == 0) return "";int min = 0x7fffffff;for(int i = 0; i < len; i ++){if(strs[i].length() < min){min = strs[i].length();}}for(int j = 0; j < min; j++){for(int i = 1; i < len; i++){if(strs[0].charAt(j) != strs[i].charAt(j)){return strs[0].substring(0,j);}}}return strs[0].substring(0,min);}
}

笔记

  1. 0x7fffffff为int的最大值
  2. 记录最小的相同位置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/481095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python pandas数据分析中常用方法

官方教程 读取写入文件 官方IO 读取 写入 read_csv       to_csv read_excel      to_excel read_hdf       to_hdf read_sql       to_sql read_json      to_json read_msgpack (experimental)   to_msgpack (experimental) read_html    …

【LeetCode】3月17日打卡-Day2

题1 拼写单词 描述 给你一份『词汇表』&#xff08;字符串数组&#xff09; words 和一张『字母表』&#xff08;字符串&#xff09; chars。 假如你可以用 chars 中的『字母』&#xff08;字符&#xff09;拼写出 words 中的某个『单词』&#xff08;字符串&#xff09;&…

小哥哥,检索式chatbot了解一下?

喵喵喵&#xff0c;一不小心又匿了三个月&#xff0c;突然诈尸害不害怕(&#xffe3;∇&#xffe3;) 小夕从7月份开始收到第一场面试邀请&#xff0c;到9月初基本结束了校招&#xff08;面够了面够了T_T&#xff09;&#xff0c;深深的意识到今年的对话系统/chatbot方向是真的…

多重共线性、异方差和自相关性

https://www.jianshu.com/p/1e5389ca9829

【LeetCode】3月18日打卡-Day3

题1 无重复字符的最长子串 描述 给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复…

别求面经了!小夕手把手教你如何斩下和选择NLP算法岗offer!(2020.4.14更新)...

推完上一篇文章&#xff0c;订阅号和知乎后台有好多小伙伴跟小夕要面经&#xff08;还有个要买简历的是什么鬼&#xff09;&#xff0c;然鹅小夕真的没有整理面经呀&#xff0c;真的木有时间(&#xff61; ́︿ ̀&#xff61;)。不过话说回来&#xff0c;面经有多大用呢&#…

机器学习算法优缺点改进总结

https://wenku.baidu.com/view/5df50157f121dd36a22d82bf.html

领域应用 | 中医临床术语系统

本文转载自公众号中医药知识组织与标准。什么是中医药术语系统&#xff1f;它是干什么用的呢&#xff1f;中医药术语系统是运用计算机与信息技术等工具&#xff0c;对中医药学各领域中的事物、现象、特性、关系和过程进行标记和概括&#xff0c;并为每个概念赋予指称形成概念体…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Image图片组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Image图片组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Image组件 Image 用来加载并显示图片的基础组件&#xff0c;它支持从内存、本…

【LeetCode】3月19日打卡-Day4

题1 最长回文串 描述 给定一个包含大写字母和小写字母的字符串&#xff0c;找到通过这些字母构造成的最长的回文串。 在构造过程中&#xff0c;请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。 注意: 假设字符串的长度不会超过 1010。 示例 1: 输入: “abccccdd” 输…

别求面经了!小夕手把手教你如何斩下和选择NLP算法岗offer!(19.11.21更新)

推完上一篇文章&#xff0c;订阅号和知乎后台有好多小伙伴跟小夕要面经&#xff08;还有个要买简历的是什么鬼&#xff09;&#xff0c;然鹅小夕真的没有整理面经呀&#xff0c;真的木有时间(&#xff61; ́︿ ̀&#xff61;)。不过话说回来&#xff0c;面经有多大用呢&#…

git - 简易指南

http://www.bootcss.com/p/git-guide/

梁家卿 | 百科知识图谱同步更新

本文转载自公众号知识工场。 本文整理自复旦大学知识工场梁家卿博士在IJCAI 2017 会议上的论文报告&#xff0c;题目为《How to Keep a Knowledge Base Synchronized with Its Encyclopedia Source》&#xff0c;作者包括&#xff1a;梁家卿博士&#xff08;复旦大学&#xff0…

【LeetCode】3月20日打卡-Day5

题1 最小的k个数 描述 输入整数数组 arr &#xff0c;找出其中最小的 k 个数。例如&#xff0c;输入4、5、1、6、2、7、3、8这8个数字&#xff0c;则最小的4个数字是1、2、3、4。 示例 1&#xff1a; 输入&#xff1a;arr [3,2,1], k 2 输出&#xff1a;[1,2] 或者 [2,1] 示…

别再搜集面经啦!小夕教你斩下NLP算法岗offer!

推完上一篇文章&#xff0c;订阅号和知乎后台有好多小伙伴跟小夕要面经&#xff08;还有个要买简历的是什么鬼&#xff09;&#xff0c;然鹅小夕真的没有整理面经呀&#xff0c;真的木有时间(&#xff61; ́︿ ̀&#xff61;)。不过话说回来&#xff0c;面经有多大用呢&#…

程序员面试100题之十六:二叉树中两个节点的最近公共父节点(最低的二叉树共同祖先)

这个问题可以分为三种情况来考虑&#xff1a;情况一&#xff1a;root未知&#xff0c;但是每个节点都有parent指针 此时可以分别从两个节点开始&#xff0c;沿着parent指针走向根节点&#xff0c;得到两个链表&#xff0c;然后求两个链表的第一个公共节点&#xff0c;这个方法很…

肖仰华 | 基于知识图谱的问答系统

本文转载自公众号知识工场。 本文整理自复旦大学知识工场肖仰华教授在VLDB 2017 会议上的论文报告&#xff0c;题目为《KBQA: Learning Question Answering over QA Corpora and Knowledge Bases》&#xff0c;作者包括&#xff1a;崔万云博士&#xff08;现上海财经大学讲师&a…

【LeetCode】3月21日打卡-Day6

题1 水壶问题 描述 有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶&#xff0c;从而可以得到恰好 z升 的水&#xff1f; 如果可以&#xff0c;最后请用以上水壶中的一或两个来盛放取得的 z升 水。 你允许&#xff1a; 装满任意一个水壶 清空…

【小夕精选】YJango 7分钟带你领略你未曾想过的线性代数+微积分

小夕很早之前就想转一些精彩的技术文章&#xff0c;这样哪怕没有时间写作的时候&#xff0c;也能把优质的干货分享给大家&#xff5e;然鹅&#xff0c;由于我也不知道是什么的原因&#xff0c;就不小心拖到了现在╮(&#xffe3;▽&#xffe3;"")╭之前有不少粉丝希…

【LeetCode】3月22日打卡-Day7

题1 描述 给定整数数组 A&#xff0c;每次 move 操作将会选择任意 A[i]&#xff0c;并将其递增 1。 返回使 A 中的每个值都是唯一的最少操作次数。 示例 1: 输入&#xff1a;[1,2,2] 输出&#xff1a;1 解释&#xff1a;经过一次 move 操作&#xff0c;数组将变为 [1, 2, 3]。…