博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2字符串2
阅读量:5016 次
发布时间:2019-06-12

本文共 7930 字,大约阅读时间需要 26 分钟。

1 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".

Clarification

- What constitutes a word?
A sequence of non-space characters constitutes a word.
- Could the input string contain leading or trailing spaces?
Yes. However, your reversed string should not contain leading or trailing spaces.
- How about multiple spaces between two words?
Reduce them to a single space in the reversed string.

class Solution{public:    string reverseWords(string s){        if(s.empty()){            return s;        }        string s_ret, s_temp;        string::size_type ix = s.size();        while(ix != 0){            s_temp.clear();            while(!isspace(s[--ix])){                s_temp.push_back(s[ix]);                if(ix == 0){                    break;                }            }            if(!s_temp.empty()){                if(!s_ret.empty()){                    s_ret.push_back(' ');                }                std::reverse(s_temp.begin(), s_temp.end());                s_ret.append(s_temp);            }        }        return s_ret;    }};

 

 


 2 valid palindrome

Given a string, determine if it is a palindrome,

considering only alphanumeric characters and ignoring cases.

Example

"A man, a plan, a canal: Panama" is a palindrome.
"race a car" is not a palindrome.

Note

Have you consider that the string might be empty?
This is a good question to ask during an interview.
For the purpose of this problem,
we define empty string as valid palindrome.

Challenge

O(n) time without extra memory.

class Solution{public:    bool isPalindrome(string& s){        if(s.empty()) return true;                int l = 0, r = s.size() - 1;        while(l < r){            if(!isalnum(s[l])){                ++l;                continue;            }            if(!isalnum(s[r])){                --r;                continue;            }            if(tolower(s[l]) == tolower(s[r])){                ++l;                --r;            }else{                return false;            }        }        return true;    }};

 

 


3 longest palindromic substring

Given a string S, find the longest palindromic substring in S.

You may assume that the maximum length of S is 1000,
and there exists one unique longest palindromic substring.

Example

Given the string = "abcdzdcab", return "cdzdc".
Challenge
O(n2) time is acceptable. Can you do it in O(n) time.

//题解1穷竭搜索 穷举所有可能的子串,判断子串是否为回文,使用一变量记录最大回文长度//若新的回文超过之前的最大回文长度则更新标记变量并记录当前回文的起止索引,最后返回最长回文子串。class Solution{public:    string longestPalindrome(string& s){        string result;        if(s.empty()) return s;                int n = s.size();        int longest = 0, left = 0, right = 0;        for(int i = 0; i < n; ++i){            for(int j = i + 1; j <= n; ++j){                string substr = s.substr(i ,j - i);                if(isPalindrome(substr) && substr.size() > longest){                    longest = j - i;                    left = i;                    right = j;                }            }        }        result = s.substr(left, right - left);        return result;    }private:    bool isPalindrome(string &s){        int n = s.size();        for(int i = 0; i < n; i++){            if(s[i] != s[n - i - 1]) return false;        }        return true;    }};
//题解2 假定扫描的每个字母是回文的中间位置(需要处理奇偶两种情况),从该位置向两头搜索寻找最大回文长度
class Solution{public:    string palindrome(string& s, int l, int r){        while(l >= 0 && r < s.size() && s[l] == s[r]) l--, r++;        return s.substr(l + 1, r - l - 1);    }    string longestPalindrome(string s){        if(s.empty()) return s;        string res;        for(int i = 0; i < s.size(); i++){            string t;            t = palindrome(s, i, i);            if(t.size() > res.size()) res = t;                        t = palindrome(s, i, i + 1);            if(t.size() > res.size()) res = t;        }        return res;    }};

 

 


4 space replacement

Write a method to replace all spaces in a string with %20.

The string is given in a characters array, you can assume it has enough space
for replacement and you are given the true length of the string.

Example

Given "Mr John Smith", length = 13.
The string after replacement should be "Mr%20John%20Smith".

Note

If you are using Java or Python,please use characters array instead of string.

Challenge

Do it in-place.

//先遍历一遍求得空格数,得到『新数组』的实际长度,从后往前遍历。class Solution{public:    int replaceBlank(char string[], int length){        int n = 0;        for(int i = 0; i < length; i++)            if(string[i] == ' ') n++;                int new_len = length + n*2;        for(int i = length - 1; i >= 0; i--){            if(string[i] != ' '){                string[--new_len] = string[i];            }else{                string[--new_len] = '0';                string[--new_len] = '2';                string[--new_len] = '%';            }        }        return length + n * 2;    }};

 

 


5 wildcard matching

Implement wildcard pattern matching with support for '?' and '*'.

'?' Matches any single character.

'*' Matches any sequence of characters (including the empty sequence).
The matching should cover the entire input string (not partial).

Example

isMatch("aa","a") → false
isMatch("aa","aa") → true
isMatch("aaa","aa") → false
isMatch("aa", "*") → true
isMatch("aa", "a*") → true
isMatch("ab", "?*") → true
isMatch("aab", "c*a*b") → false

class Solution{public:    bool isMatch(string s, string p) {        int star = 0, ss = 0, i = 0, j = 0;        while (s[i]) {            if (p[j] == '?' || p[j] == s[i]) { j++; i++; continue; }            if (p[j] == '*') { star = ++j; ss = i; continue; }            if (star) { j = star; i = ++ss; continue; }            return false;        }        while (p[j] == '*') j++;        return !p[j];    }};

 

 


6 length of last word

Given a string s consists of upper/lower-case alphabets and empty space characters ' ',

return the length of last word in the string.

If the last word does not exist, return 0.

Example
Given s = "Hello World", return 5.

Note

A word is defined as a character sequence consists of non-space characters only.

class Solution{public:    int lengthOfLastWord(string s){        if(s.size() == 0) return 0;                int count = 0;        for(int i = s.size() - 1; i >= 0; i--)            if(s[i] == ' '){                if(count) break;            }else                count++;        return count;    }};

 

 


7 count and say

The count-and-say sequence is the sequence of integers beginning as follows:

1, 11, 21, 1211, 111221, ...

1 is read off as "one 1" or 11.

11 is read off as "two 1s" or 21.
21 is read off as "one 2, then one 1" or 1211.

Given an integer n, generate the nth sequence.

Example
Given n = 5, return "111221".

Note

The sequence of integers will be represented as a string.

//题解1 本课程内容,由作者授权实验楼发布,未经允许,禁止转载、下载及非法传播题目大意是找第 n 个数(字符串表示),规则则是对于连续字符串,表示为重复次数+数本身。class Solution{public:    string countAndSay(int n){        if(n == 0) return "";        string res = "1";        while(--n){            string cur = "";            for(int i = 0; i < res.size(); i++){                int count = 1;                while((i + 1 < res.size()) && (res[i] == res[i + 1])){                    count++;                    i++;                }                cur += to_string(count) + res[i];            }            res = cur;        }        return res;    }};
//题解2 递归class Solution{public:    string countAndSay(int n){        if(n == 1) return "1";        string res, tmp = countAndSay(n - 1);        char c = tmp[0];        int count = 1;        for(int i = 1; i < tmp.size(); i++)            if(tmp[i] == c)                count++;            else{                res += to_string(count);                res.push_back(c);                c = tmp[i];                count = 1;            }        res += to_string(count);        res.push_back(c);        return res;    }};

 

转载于:https://www.cnblogs.com/leosirius/p/8322014.html

你可能感兴趣的文章
面向对象高级
查看>>
Bitwise And Queries
查看>>
打印Ibatis最终的SQL语句
查看>>
HBase之八--(3):Hbase 布隆过滤器BloomFilter介绍
查看>>
oracle连接问题ORA-00604,ORA-12705
查看>>
NOI 2019 退役记
查看>>
java的几个日志框架log4j、logback、common-logging
查看>>
Java从零开始学十三(封装)
查看>>
Python2和Python3中的rang()不同之点
查看>>
MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)...
查看>>
UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。
查看>>
记忆--1.致我们不可缺少的记忆
查看>>
lintcode28- Search a 2D Matrix- easy
查看>>
react项目
查看>>
C# 万年历 农历 节气 节日 星座 星宿 属相 生肖 闰年月 时辰(转)
查看>>
A Simple Tree Problem
查看>>
Modular Inverse [ZOJ 3609]
查看>>
MySQL性能测试工具之mysqlslap使用详解
查看>>
深入理解jsonp跨域请求原理
查看>>
regsvr32注册COM组件失败
查看>>