您的位置:首页 > 其它

leetcode第三周解题总结(5,7,66)

2017-03-14 23:04 302 查看

5. 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.

Example:

Input: “babad”

Output: “bab”

Note: “aba” is also a valid answer.

Example:

Input: “cbbd”

Output: “bb”

题意解析:

寻找字符串中的最长回文子串

解题思路:

第一周做过一个类似的判断是否为回文字串的题目(125. Valid Palindrome),但这道题似乎就没那么简单,要找到最长的回文字串。一个思路是遍历所有的中心对称点,如果有n个字符,那么就有(2n - 1)个中心对称点,在每个对称点上用两个指针的方法寻找最长的回文字串,最后输出最长的字符串。

class Solution {
public:
string longestPalindrome(string s) {
size_t len = s.size();
if(len == 0 || len == 1) return s;

int left = 0, right = 0;
for (size_t point = 0; point < len; point++) {
int start = point;
int end = point;
while(start >= 0 && end < len && s[start]==s[end]){
start --;
end ++;
}

if(end - start > right - left) {
left = start;
right = end;
}

start = point;
end = point + 1;
while(start >= 0 && end < len && s[start]==s[end]){
start --;
end ++;
}

if(end - start > right - left) {
left = start;
right = end;
}

}
return s.substr(left + 1, right - 1 -left);
}
};


开始第二个知识点的学习 — Math

7. Reverse Integer

Reverse digits of an integer.

Example1: x = 123, return 321

Example2: x = -123, return -321

Note:

The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

题意解析:

32位有符号整数的翻转,如果溢出则返回0

解题思路:

数学题,思路并不难,直接看代码即可。

class Solution {
public:
int reverse(int x) {
int y = 0;
while (abs(x) > 0) {
if(abs(y) > INT_MAX/10 || (abs(y) == INT_MAX/10  && (x >= 7 || x <= -8))) return 0;
y = y*10 + x%10;
x = x/10;
}
return y;

}
};


66. Plus One

Given a non-negative integer represented as a non-empty array of digits, plus one to the integer.

You may assume the integer do not contain any leading zero, except the number 0 itself.

The digits are stored such that the most significant digit is at the head of the list.

题意解析:

非负整数加1,进位操作

解题思路:

只有当该数字每一位上都是9才会增加一位,而其他情况则比较简单,直接进位操作

class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
size_t len =  digits.size();
for (int i = len - 1; i >= 0; i--) {
if (digits[i] < 9) {
digits[i] += 1;
return digits;
} else {
digits[i] = 0;
}
}
digits[0] = 1;
digits.push_back(0);
return digits;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: