1. 最后一个单词的长度
题目来源
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例 1:
输入:s = “Hello World”
输出:5
解释:最后一个单词是“World”,长度为 5。
class Solution {
public:int lengthOfLastWord(string s) {int n = s.size();int end = n - 1;while (end >= 0){if (s[end] == ' ') end--;else break;}int idx = end;while (idx >= 0){if (s[idx] == ' ') break;idx--;}return end - idx;}
};
2. 最长公共前缀
题目来源
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
class Solution {
public:string longestCommonPrefix(vector<string>& strs) {for (int i = 0; i < strs[0].size(); i++){char ch = strs[0][i];for (int j = 1; j < strs.size(); j++){if (strs[j][i] != ch || i == strs[j].size()) return strs[0].substr(0, i);}}return strs[0];}
};
二分查找
class Solution {
public:string longestCommonPrefix(vector<string>& strs) {int minlen = min_element(strs.begin(), strs.end(), [](const string& s, const string& t) {return s.size() < t.size();})->size(); // min_element返回的是strs中长度最短的字符串的迭代器,所以这里需要->size()获取长度int left = 0, right = minlen;while (left < right){int mid = (right - left + 1) / 2 + left;if (isCommon(strs, mid)){left = mid;}else right = mid - 1;}return strs[0].substr(0, right);}bool isCommon(vector<string>& strs, int len){string temp = strs[0].substr(0, len);for (int i = 1; i < strs.size(); i++){for (int j = 0; j < temp.size(); j++){if (temp[j] != strs[i][j]) return false;}}return true;}
};