LeetCode初级算法之字符串:14.最长公共前缀
最长公共前缀题目地址:https://leetcode-cn.com/problems/longest-common-prefix/
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,”flow”,”flight”]输出: “fl”
示例 2:
输入: [“dog”,”racecar”,”car”]输出: “”解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
解法一:横向比较去找到多个串的公共前缀不知道,但我们至少知道找两个串的公共前缀。于是两两一组用上次公共串找下公共直到n-1次迭代完成最终公共前缀,那么像第一个示例三个串,就需要2次迭代
也就是说我们用一个公共前缀与下一个得到公共前缀然后更新覆盖,开始下一次迭代。那么一开始我们指定strs[0]为第一代的公共前缀,下面是初次提交成功的代码:
12345678910111213141516171819202122232425262728public String longestCommonPrefix(String[] s ...
LeetCode初级算法之字符串:38.外观数列
外观数列题目地址:https://leetcode-cn.com/problems/count-and-say/
给定一个正整数 n ,输出外观数列的第 n 项。
「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。
你可以将其视作是由递归公式定义的数字字符串序列:
countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。
1234567//前五项如下:111211211111221
第一项是数字 1描述前一项,这个数是 1 即 “ 一 个 1 ”,记作 “11”描述前一项,这个数是 11 即 “ 二 个 1 ” ,记作 “21”描述前一项,这个数是 21 即 “ 一 个 2 + 一 个 1 ” ,记作 “1211”描述前一项,这个数是 1211 即 “ 一 个 1 + 一 个 2 + 二 个 1 ” ,记作 “111221”要 描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量 ...
LeetCode初级算法之字符串:28.实现 strStr()
实现 strStr() 函数题目地址:https://leetcode-cn.com/problems/implement-strstr/
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1:
输入: haystack = “hello”, needle = “ll”输出: 2
示例 2:
输入: haystack = “aaaaa”, needle = “bba”输出: -1
说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
解法一:暴力解法本题就是要实现一个indexOf函数,首先想到的就是双指针在两个串中比较。
暴力解法(BF)就依次扫描如果有相同的同步继续,出现不同就中断了,模式串回到起点主串回到下个开头点。也就 ...
LeetCode初级算法之字符串:8.字符串转换整数 (atoi)
字符串转换整数 (atoi)题目地址:https://leetcode-cn.com/problems/string-to-integer-atoi/
请你来实现一个 atoi 函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:
如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。
假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。
该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。
**注意:**假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0 。
提示:
本题中的空白字符只包括空格字符 ‘ ‘ 。假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围 ...
LeetCode初级算法之字符串:125.验证回文串
验证回文串题目地址:https://leetcode-cn.com/problems/valid-palindrome/
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
**说明:**本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”输出: true
示例 2:
输入: “race a car”输出: false
解法一:双指针首先判断两个字符串是否是回文串,就是原串与倒序是否相等,那不就是前面写的反转字符串么。只不过就是首尾交换,换成首尾是否相等。但在此之前我们先要从原串中获取数字字母串并忽略大小写
123456789101112131415161718192021222324252627public boolean isPalindrome(String s) { if(s == null || s.length() == 0) return true; char[] arr = s.toCharArray(); int n = arr ...
LeetCode初级算法之字符串:242.有效的字母异位词
有效的字母异位词题目地址:https://leetcode-cn.com/problems/valid-anagram/
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram”输出: true
示例 2:
输入: s = “rat”, t = “car”输出: false
说明:你可以假设字符串只包含小写字母。
进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
解法一:Hash表这题呢也是一个查找的一个操作,所以直接想到的就是hash表。两个字符串字母都一样就位置不一样,那就用Hash记录。最后key没有差别并且值相等就是异位词,两个值相等其实就换成是一个值等于0。用一个map完成
1234567891011121314151617181920212223public boolean isAnagram(String s, String t) { char[] ss = s.toChar ...
LeetCode初级算法之字符串:387.字符串中的第一个唯一字符
字符串中的第一个唯一字符题目地址:https://leetcode-cn.com/problems/first-unique-character-in-a-string/
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
示例:
12345s = "leetcode"返回 0s = "loveleetcode"返回 2
提示: 你可以假定该字符串只包含小写字母。
解法一:双指针双指针比较,每指定一个值都要全文扫描有无重复
123456789101112131415161718public int firstUniqChar(String s) { char[] arr = s.toCharArray(); int n = arr.length; for(int i = 0; i < n; i++){ boolean flag = true; //遍历每个值与当前值比较,有重复改false for(int j = 0; j ...
LeetCode初级算法之字符串:7.整数反转
整数反转题目地址:https://leetcode-cn.com/problems/reverse-integer/
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
12输入: 123输出: 321
示例 2:
12输入: -123输出: -321
示例 3:
12输入: 120输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解法一:暴力解法主体
整数转字符串
字符串的反转
字符串转整数
边界
数值溢出边界:溢出返回0
细节
首位不为0
符号处理
123456789101112131415161718public int reverse(int x) { //1.整数转字符串 String str = "" + x; char[] s = str.toCharArray(); //2.字符串的反转 int n = s.length; f ...

