
字符串
Betternw
这个作者很懒,什么都没留下…
展开
-
大数乘法。
题目描述以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。(字符串长度不大于10000,保证字符串仅由’0’~'9’这10种字符组成)示例1输入:“11”,“99”返回值:“1089”说明:11*99=1089分析即乘法分配律,如AB*CD=AC(AD+BC)BD,将两个数组逐位相乘的结果对位存放在新的数组里,再对新数组进行进位判定,进位结束后将新数组转化成字符串输出。【AB, (AD+BC), BD】进行进位,每一处只留个位,剩下的向前进位代码impor原创 2021-08-07 20:16:10 · 285 阅读 · 0 评论 -
回文字符串
题目描述给定一个字符串,请编写一个函数判断该字符串是否回文。如果回文请返回true,否则返回false。示例1输入:“absba”返回值:true分析代码class Solution {public boolean judge(string str) { int len = str.length(); for(int i = 0 ; i < len/2 ;i++) { if(str.charAt(i)!=原创 2021-08-07 10:41:50 · 116 阅读 · 0 评论 -
最长公共子串
题目描述给定两个字符串str1和str2,输出两个字符串的最长公共子串题目保证str1和str2的最长公共子串存在且唯一。示例1输入:“1AB2345CD”,“12345EF”返回值:“2345”代码public String LCS(String str1, String str2) { int maxLenth = 0;//记录最长公共子串的长度 //记录最长公共子串最后一个元素在字符串str1中的位置 int maxLastIndex = 0; int原创 2021-08-01 15:14:36 · 144 阅读 · 0 评论 -
反转字符串 反转大小写
题目描述写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)示例1:输入:“abcd”返回值:“dcba”分析开辟一个和str长度大小相同的一个字符串ans,把传入的str倒序赋值到ans字符串上, 时间复杂度O(n),额外空间复杂度O(n)原地交换,,注意:交换进行的次数是次时间复杂度O(n),额外空间复杂度O(1)代码public String solve (String str) { char[] ans = str.toC原创 2021-08-01 14:55:24 · 1794 阅读 · 0 评论 -
415 字符串相加
题目描述给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。提示:num1 和num2 的长度都小于 5100num1 和num2 都只包含数字 0-9num1 和num2 都不包含任何前导零你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式分析carry保存进位代码 public String addStrings(String num1, String num2) { StringBuilder res = new原创 2021-07-05 17:13:51 · 72 阅读 · 0 评论 -
【单调栈】 316. 去除重复字母
题目描述给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例 1:输入:s = “bcabc”输出:“abc”示例 2:输入:s = “cbacdcbc”输出:“acdb”思路分析入栈条件:当前元素字典序大于栈顶,且栈中没有出现过该元素维护一个计数数组和判断栈中是否出现过该元素的数组for循环遍历,当栈中没有出现过该元素的时候,当前元素小于栈顶元素字典序并且栈顶元素后面还有的时候,栈顶出栈。原创 2021-05-28 18:20:28 · 105 阅读 · 0 评论 -
【滑动窗口】 567 字符串的排列
题目描述:给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的 子串 。示例 1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).示例 2:输入: s1= “ab” s2 = “eidboaoo”输出: False思路分析 public boolean checkInclusion(String s1, String s2) {原创 2021-05-26 20:58:39 · 100 阅读 · 0 评论 -
6 Z字形变换
题目将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入: s = “L原创 2020-08-21 16:15:28 · 229 阅读 · 0 评论 -
125 验证回文串
题目描述给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。示例 1:输入: “A man, a plan, a canal: Panama” 输出: true示例 2: 输入: "race a car“ 输出: false思路分析首先分析清楚题目,只考虑字母和数字字符。那么遇到不是这两个的就跳过去。双指针,一前一后,当不是字母和数字时跳过,当是时,进行...原创 2020-03-09 11:11:17 · 140 阅读 · 0 评论 -
171 Excel表序列号
题目描述给定一个Excel表格中的列名称,返回其相应的列序号。例如:A–1 B–2 C–3 …Z–26 AA–27 AB–28 示例 1: 输入: “A” 输出: 1示例 2: 输入: “AB” 输出: 28 示例 3: 输入: “ZY” 输出: 701思路分析26进制转换为10进制。数字和字母的转换:数字= 字母-‘A’+1;代码实现...原创 2020-03-09 21:33:26 · 383 阅读 · 0 评论 -
【滑动窗口】 3 无重复字符的最长子串
题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。思路滑动窗口。将字符串转化为字符,放入hashmap中,对应的value的的位置。右指针移动放入元素,每次都计算与左的长度并取最大值,遇到重复的时,左指针来到上次这个元素出现位置的后一个。左指针更新位置时还要与上次元素位置大小进行比较的原因是:可能会有两个重复的元素,如果只找上一个重复的后一位,可能会倒退位置: …a…b…a原创 2020-06-11 10:19:16 · 124 阅读 · 0 评论 -
【滑动窗口】 76 最小覆盖子串
题目给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”思路right指针移动,直到window窗口中包含了所有t字符串的元素。left指针移动,计算每次移动后window的长度,并且用substring方法连接left到right的元素形成输出的字符串。直到window窗口中不包含t的元素,此时回到1步。直到right到达结尾,结束循环。代码public Str原创 2020-06-11 11:48:25 · 140 阅读 · 0 评论 -
【dfs回溯 条件判断后回溯 for循环中】 17 电话号码的字母组合
题目给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].思路理解流程,自主无法写出代码。比如要求234的字母组合,用index记录遍历到哪个数字位置。获取到2的对应字母,然后第一个字母与3的字母进行组合。当index遍历到最后时,输出目前累加的字符串结果。动画演示代码Strin原创 2020-06-12 11:47:53 · 182 阅读 · 0 评论 -
【dfs回溯 if条件判断后回溯】 22括号生成
题目数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]思路回溯算法当左右括号都有大于0个剩余可以使用,才产生组合放入左括号时,只看是否还有左括号需要使用产生右括号时,需要保证右边剩余大于左边的才可以减1进行组合在左边和右边剩余0的时候进行结算代码public List<String> generatePar原创 2020-06-16 23:18:48 · 151 阅读 · 0 评论 -
【哈希表 【字符串,list】形式 】 49 字母异位词分组
题目给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]分析构建哈希表,key为string,值保存按照字典排序的字符串,value为list值保存所有符合该字符串的值代码public List<List<String>> groupAnagr原创 2020-06-20 22:52:37 · 124 阅读 · 0 评论 -
【回溯 dfs for循环进入dfs,marked数组标记,direction数组路径】 79 单词搜索
题目给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回 true给定 word = “SEE”, 返回 true给定 word = “ABCB”, 返回 false思路原创 2020-06-23 17:09:31 · 163 阅读 · 0 评论 -
【滑动窗口 总结】 438 找到字符串中所有字母异位词
题目给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。输入:s: “cbaebabacd” p: “abc”输出:[0, 6】起始索引等于 0 的子串是 “cba”, 它是 “abc” 的字母异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的字母异位词。思路滑动窗口总结与寻找字符串排列一样 找到一个合法异位词就将起始索引加入res框架:while(){右移窗口进行窗口内数据更新判断左侧是否收缩wh原创 2020-06-27 12:18:34 · 101 阅读 · 0 评论 -
【栈】 394 字符串解码
题目k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。输入:s = “3[a]2[bc]”输出:“aaabcbc”输入:s = “3[a2[c]]”输出:“accaccacc”思路建立两个栈,分别存储数字和字母。建立数字和字符串进行临时记录。当遍历到数字时,放入数字中。当遍历到字母时,放入字符串中。当遍历到【时,将数字放入数字栈,并清零。将字符串放入字符串栈中,并清空。当遍历到】时,数组栈出数字作为重复次原创 2020-06-29 15:24:20 · 150 阅读 · 0 评论 -
offer05 替换空格
题目请实现一个函数,把字符串 s 中的每个空格替换成"%20"。输入:s = “We are happy.”输出:“We%20are%20happy.”思路注意:经常变换的字符串声明为StringBuilder类字符串连接用append方法最后要将StringBuilder类toString字符串基本所有方法都要加()代码public String replaceSpace(String s) { StringBuilder res = new StringBuilder();原创 2020-07-03 20:35:58 · 90 阅读 · 0 评论 -
【回溯 dfs 剪枝】 offer38 字符串的排列
题目输入一个字符串,打印出该字符串中字符的所有排列。可以以任意顺序返回这个字符串数组,但里面不能有重复元素。输入:s = “abc”输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]思路47题同思路代码public String[] permutation(String s) { int length = s.length(); if(length==0) return new String[0]; List<原创 2020-07-08 10:45:18 · 105 阅读 · 0 评论 -
offer 67 把字符串转换成整数
题目写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。注意:假如该字符串中的第一原创 2020-07-14 15:36:49 · 113 阅读 · 0 评论 -
【动态规划】 647回文子串
题目给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。输入: “abc”输出: 3解释: 三个回文子串: “a”, “b”, “c”.输入: “aaa”输出: 6说明: 6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”.思路用数组dp【i】【j】表示是否为回文子串。首先,单个元素是回文。长度小于3且边界相等的是回文。其次,当边界相等,长度大于3的时候,判断通过:原创 2020-06-26 17:26:03 · 139 阅读 · 0 评论 -
【双指针 动态规划dp数组】5 最长回文子串
题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。思路暴力法定义一个判定回文的方法。双指针移动,当i-j之间的子串满足回文且本次的长度大于上次的长度,更新最大长度值,并用一个指针记录当前的i也就是字符串的开头位置。代码public String longestPalindrome(String s) { int len = s.length(); int原创 2020-06-11 16:28:49 · 159 阅读 · 0 评论 -
【哈希表】 offer 50 第一个只出现一次的字符
题目在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。示例:s = “abaccdeff”返回 “b”s = “”返回 " "思路LinkedHashMap,存储数据采用的哈希表结构+链表结构。保证元素的存取顺序一致,因此可以符合取出第一个数量为1的值,并且相同的key可以实现覆盖更改代码public char firstUniqChar(String s) { //LinkedHashMap,存储数据采用的哈希表结构+链表结构。保证元素原创 2020-07-10 22:11:59 · 122 阅读 · 0 评论 -
【动态规划】offer 46 把数字翻译成字符串
题目给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”思路dp数组表示当前结尾的表示形式次数。如果前两位数字属于10-25范围,那么 dp[i] = dp[i - 1] +原创 2020-07-09 17:50:34 · 134 阅读 · 0 评论 -
【双指针】 offer58-1 翻转单词顺序
题目输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。示例 1:输入: “the sky is blue”输出: “blue is sky the”示例 2:输入: " hello world! "输出: “world! hello”解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: “a go原创 2020-07-12 19:11:22 · 137 阅读 · 0 评论 -
offer58-2 左旋转字符串
题目字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6输出: “umghlrlose”思路字符串拼接。按照指定位置分割开始拼接。使用StringBuilder类。代码 public S原创 2020-07-12 19:17:05 · 91 阅读 · 0 评论 -
【递归】 139 单词拆分
题目给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。输入: s = “applepenapple”, wordDict = [“apple”, “pe原创 2020-06-24 11:10:43 · 136 阅读 · 0 评论