字符串问题
ojshilu
https://github.com/lucky521
展开
-
两个字符串的最小编辑距离 Edit Distance
问题:Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)You have the following 3 operations permitted on a word原创 2014-03-05 14:40:40 · 5581 阅读 · 0 评论 -
寻找最长重复子串/子数组 Longest Repeated Sequence
1,c[]是作为输入的字符串。a[]这个指针数组中的每个元素都是指向输入字符串的一个后缀子串的指针。后缀子串就是从输入字符串的某一个字符开始到字符串结尾所构成的子串。对于一个长度为n的字符串,就会有n个后缀子串(输入串本身也算是一个)。2,将这n个后缀子串排序。按照字母表顺序排序后,含有重复子串的后缀子串就会挨在一起。逐次比较相邻的两个后缀子串进行匹配,看他们的匹配长度。选出匹配长度最原创 2013-07-17 22:32:50 · 1270 阅读 · 2 评论 -
单词变换路径 Word Ladder II
这一问题是《单词变换距离 Word Ladder (无权图的最短路径) 》的引申问题。Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from start to end, such that:Only one let原创 2014-04-02 17:09:10 · 2678 阅读 · 0 评论 -
回文子串划分 Palindrome Partitioning
问题:将一个字符串进行划分,要求划分成的子串都必须是回文串。找出所有可能的划分情况。思路:backstrack吧,每一次只有在满足是回文的情况下深入下一层。class Solution {public: vector> partition(string s) { vector > result; vector now; if(s.s原创 2014-03-21 19:21:53 · 1481 阅读 · 0 评论 -
最小回文分割数 Palindrome Partitioning II
问题:Given a string s, partition s such that every substring of the partition is a palindrome.Return the minimum cuts needed for a palindrome partitioning of s.For example, given s = "aab",原创 2014-04-01 21:35:09 · 3440 阅读 · 0 评论 -
删除有序数组中的重复元素 Remove Duplicates from Sorted Array
题目源自于Leetcode。题目:Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.Do not allocate extra space for another array, you must do原创 2013-11-04 13:59:48 · 1733 阅读 · 0 评论 -
阿拉伯数字转换为汉语表达方式
汉语博大精深,讲一个简单的阿拉伯数字转换为我们比如 1980,要转换为“一千九百八十”;198 要转换为“一百九十八”;19 要转换为“十九”,1要转换为“一”。数值:零一二三四五六七八九小权值:十 百 千 大权值:万 亿特殊用例:1、注意0的出现。1080、1008、1800、10000、1000000、100000000。2、如果某个大权值内的四位都是0原创 2014-05-01 18:43:35 · 2710 阅读 · 0 评论 -
文本布局调整 Text Justification
问题:Given an array of words and a length L, format the text such that each line has exactly L characters and is fully (left and right) justified.You should pack your words in a greedy approach;原创 2014-03-30 17:28:29 · 1391 阅读 · 0 评论 -
字符串单词拆分 Word Break
问题:给出一个字符串,问能否将其拆分为1或多个单词。单词表已给出。Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.For example, given原创 2014-03-17 10:07:28 · 3458 阅读 · 0 评论 -
变形字符串识别 Scramble String
问题:Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively.Below is one possible representation of s1 = "great": great / \原创 2014-03-27 19:51:42 · 1675 阅读 · 0 评论 -
寻找若干个字符串的最长公共前缀 Longest Common Prefix
题目来源于Leetcode。题目:给出若干个字符串,找出他们的最长公共前缀子串。假设这里字符串有n个,平均长度为m。方法:1、所求的最长公共前缀子串一定是每个字符串的前缀子串。所以随便选择一个字符串作为标准,把它的前缀串,与其他所有字符串进行判断,看是否是它们所有人的前缀子串。这里的时间性能是O(m*n*m)。2、列出所有的字符串的前缀子串,将它们合并后排序,找出其中个数为n且原创 2013-10-20 11:44:19 · 10982 阅读 · 2 评论 -
有效数判定 Valid Number
问题:给出一个字符串,判断它是否是一个有效的数字。什么叫有效的数字呢?整数 ,小数 "2.5",正数 "+25",负数"-25",科学计数法"-2e1+0"。特殊用例:“.5”, “5.” 认为是有效数字。无效用例:“.", "e25", "25e", "2e5e5", "2.5.5", "2e2.5"输入检查:左右两端出现空格是允许的,内部不能有空格。class原创 2014-04-01 19:30:04 · 1846 阅读 · 2 评论 -
寻找最长回文子串 Longest Palindrome DP解法
Longest Palindrome回文基础:如果子串P是回文,那么xPx是回文。如果子串P不是回文,那么xPx不是回文。根据回文基础,我们可以得到动态规划的状态转移函数。设置状态量LP[i][j]来表示任意某个子串a[i]...a[j]是否是回文。那么,1. 初始条件:空串 看作是回文的最初始条件,LP[i][i-1]=1。这作为初始状态,并不认为原创 2013-09-29 11:01:33 · 1521 阅读 · 0 评论 -
KMP算法实现strstr()函数
strStr()函数是C语言库中的字符串匹配函数,函数搜索一个字符串在另一个字符串中的第一次出现。原创 2014-05-30 10:24:51 · 3146 阅读 · 0 评论 -
通配符匹配字符串 Wildcard Matching
问题:实现支持?和*两个通配符的字符串匹配函数。Implement wildcard pattern matching with support for '?' and '*'.'?' Matches any single character.'*' Matches any sequence of characters (including the empty sequence).原创 2014-03-31 22:09:34 · 2424 阅读 · 2 评论 -
多种括号的匹配 Valid Parentheses
题目源自于Leetcode。题目:Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.The brackets must close in the correct order, "()" and "()[]{原创 2013-10-27 15:21:09 · 1227 阅读 · 0 评论 -
寻找最长的括号匹配 Longest Valid Parentheses
问题:Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.For "(()", the longest valid parentheses substring is "()",原创 2014-02-27 14:02:07 · 1340 阅读 · 0 评论 -
单词变换距离 Word Ladder (图的最短路径)
问题:Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from start to end, such that:Only one letter can be changed at a timeEach intermediate原创 2014-02-28 20:15:53 · 2604 阅读 · 0 评论 -
寻找最长无重复字符子串 Longest Substring Without Repeating Characters
要求:Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. F原创 2013-09-29 16:42:20 · 1501 阅读 · 0 评论 -
字母矩形中单词搜索 Word Search
问题:Given a 2D board and a word, find if the word exists in the grid.The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertica原创 2014-03-14 19:47:28 · 1394 阅读 · 0 评论 -
交错字符串 Interleaving String
题目源自待字闺中的微信。判断字符串c是否是字符串a和字符串b按顺序的交错(interleave)。关键问题:判断一个字符串是否是另一个字符串的子序列。需要用O(n)时间来解决。int issubsequence(char *m, char *s){ if(m == NULL || s == NULL) return NULL; int i=0,j=0; while(原创 2013-09-17 13:46:10 · 1968 阅读 · 0 评论 -
解码方法数 Decode Ways
问题:A message containing letters from A-Z is being encoded to numbers using the following mapping:'A' -> 1'B' -> 2...'Z' -> 26Given an encoded message containing digits, determine the total原创 2014-03-17 21:10:07 · 1777 阅读 · 0 评论 -
翻转单词顺序 Reverse Words in a String
问题:Given an input string, reverse the string word by word. For example,Given s = "the sky is blue",return "blue is sky the".思路:两轮翻转。第一次整个串彻底反转,第二次逐个单词自身翻转。输入用例:输入数据的细节特别重要。开头有空格、结尾有空格、多个原创 2013-09-05 20:19:01 · 953 阅读 · 0 评论 -
字符串中某子序列的个数 Distinct Subsequences
问题:Given a string S and a string T, count the number of distinct subsequences of T in S.要求出S中所有的为T的子序列。思路:一、直观想法:递归试探。指数级复杂度。class Solution {public: int numDistinct(string S, string T)原创 2014-03-11 19:36:55 · 2389 阅读 · 0 评论 -
删除序列中的指定元素 Remove Element
题目源自于Leetcode。题目:Given an array and a value, remove all instances of that value in place and return the new length.The order of elements can be changed. It doesn't matter what you leave beyond the原创 2013-11-04 14:11:16 · 1630 阅读 · 0 评论 -
消除嵌套的括号 clear brace in string
题目源自于百度公司2014校园笔试的一道字符串题。题目:给定一个如下格式的字符串(1,(2,3),(4,(5,6),7))括号内的元素可以是数字,也可以是另一个括号,请实现一个算法消除嵌套的括号,比如把上面的表达式变成:(1,2,3,4,5,6,7),如果表达式有误请报错。思路:希望算法所占空间越小越好。做到不用栈来匹配括号、不用临时数组来存储新字符串。空间上:在括号匹配的原创 2013-10-18 11:15:36 · 1654 阅读 · 0 评论 -
将罗马数字字符串转换为阿拉伯整形数 Roman to Integer
题目源自于leetcode,和前一道是正好相反的计算。另一道题在http://blog.csdn.net/luckyjoy521/article/details/12836795思路:需要进行字符串的匹配,但是罗马数字并不是前/后缀编码,暂时没有想到好的方法。所以就枚举吧。代码:class Solution {public: int romanToInt(st原创 2013-10-18 14:34:56 · 1626 阅读 · 0 评论 -
压缩字符串中的连续重复字符
题目源自于华为公司机试题目。题目:通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出现的重复字母进行压缩,并输出压缩后的字符串。压缩规则:1、仅压缩连续重复出现的字符。比如字符串”abcbc”由于无连续重复字符,压缩后的字符串还是”abcbc”。2、压缩字段的格式为”字符重复的次数+字符”。例如:字符串”xxxyyyyyyz”压缩后就成为”3原创 2013-10-24 11:10:27 · 3638 阅读 · 0 评论 -
1510 替换空格
#include#includeusing namespace std; int main(){ char str[1000000]; gets(str); if("" == str) return 0; int len = 0; int blanknum = 0; int i =原创 2013-07-12 14:55:42 · 950 阅读 · 0 评论 -
1508 把字符串转换成整数 atoi()
# include# include# include int my_atoi(char *str, int &num) //返回值表示状态{ int sign=1,index=0, w=1; int len = strlen(str); if(str==NULL || len==0) //合法性检查 return -1; if(str[index]=='-') //正负数原创 2013-09-05 16:24:50 · 1064 阅读 · 0 评论 -
1362 循环左移字符串
1、根据1361的原理,对这道题进行联想。发现本问题可以采用两次翻转方法。(看来这样翻转局部位置但不翻转内部顺序的问题都可以这样解决)第一次整体翻转,第二次局部翻转。(或者先局部翻转,再整体翻转)2、需要注意一个点:循环左移。 要做到真正的循环,需要对移动次数求模。找到实际移动的次数。# include# include# include int reverse(cha原创 2013-09-05 20:45:22 · 1109 阅读 · 0 评论 -
翻译数字串 transform number to string
题目源自于待字闺中的微信。题目:给一个数字串,将其映射为一个字符串。映射关系为1->a, 2->b,..., 25->y, 26->z。对于一个输入串,判断能否进行转换。如果能的话,输出所有可能转换成的字符串。注意考虑指针到字符串结尾和字符串在倒数第1个字符的特殊情况。本方法为每种可能的转换情况申请了空间,空间复杂度不理想。#include #includ原创 2013-09-25 15:35:04 · 1056 阅读 · 0 评论 -
实现String to Integer (atoi)
题目源自于Leetcode。思路:一定要考虑所有的情况。一、合法性检查1、输入字符型指针是否指向空?2、输入字符串内是否有非阿拉伯数字?(是否允许字符串开头有空格?是否允许字符串后面出现其他字符?)二、特殊情况1、正负数情况2、溢出情况的判断:这里我用的是一个64位整型数来帮忙的。INT_MAX (2147483647) 和 INT_MIN (-原创 2013-10-13 15:37:39 · 1179 阅读 · 0 评论 -
简单的正则表达式匹配 Regular Expression Matching
题目源自于Leetcode。只需要支持两个匹配符*和.。'.' Matches any single character.'*' Matches zero or more of the preceding element.本题的要求是能够全部匹配整个母字符串,而不是包含有。The matching should cover the entire input string (no原创 2013-10-13 22:41:33 · 2432 阅读 · 0 评论 -
手机键盘上的排列组合问题 Letter Combinations of a Phone Number
题目源自于Leetcode。题目:Given a digit string, return all possible letter combinations that the number could represent.A mapping of digit to letters (just like on the telephone buttons) is given below.思路:原创 2013-10-20 17:25:50 · 1433 阅读 · 0 评论 -
回文判定 Valid Palindrome
看似简单的问题总是非常容易出错!典型的测试用例非常关键!问题:Given a string, determine if it is a palindrome, considering onlyalphanumeric characters and ignoring cases.For example,"A man, a plan, a canal: Panama" is a p原创 2014-03-05 10:07:31 · 1033 阅读 · 0 评论 -
Restore IP Addresses
Leetcode问题:Given a string containing only digits, restore it by returning all possible valid IP address combinations.For example:Given "25525511135",return ["255.255.11.135", "255.255.111.35原创 2014-03-02 11:50:29 · 864 阅读 · 0 评论 -
字符串窗口覆盖 Minimum Window Substring
题目:Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).For example,S = "ADOBECODEBANC"T = "ABC"Minimum window is "原创 2014-02-25 21:37:36 · 1074 阅读 · 0 评论 -
简化文件的绝对路径 Simpify Path
在操作系统中,每个文件都有一个绝对路径。并且其最简化的形式是唯一的。对于Unix系列系统,绝对路径是从根路径/开始的,用正斜杠表示。一个句点.表示当前路径,两个句点..表示上一级路径。对于一个路径字符串,从左到右依次读。下面的程序是用来简化Unix文件系统的路径字符串,使其达到最简化的程序,取出中间多余的/或者重复的层次进出。思想:用一个栈来维护绝对路径中从根到文件的纯净的层次次序,去除重原创 2014-02-23 14:37:18 · 3752 阅读 · 0 评论 -
二进制加法的实现(字符串形式) Add Binary
题目:Given two binary strings, return their sum (also a binary string).For example,a = "11"b = "1"Return "100".思路:二进制加法和普通加法的思路没什么差别,甚至更简单。所需要注意的细节就是进位。从最低位开始,进位可能伴随计算直到最高位。所以每一位的加法运算都要将上一原创 2014-02-21 20:31:05 · 5954 阅读 · 0 评论