题目描述:
给你一个字符串 s ,每 两个 连续竖线 '|' 为 一对 。换言之,第一个和第二个 '|' 为一对,第三个和第四个 '|' 为一对,以此类推。
请你返回 不在 竖线对之间,s 中 '*' 的数目。
注意,每个竖线 '|' 都会 恰好 属于一个对。
思路:
1、先统计 | 的数量cnt,数量为偶数则开始统计 * 的数量ans;
class Solution {
public:
int countAsterisks(string s) {
int cnt = 0;
int ans = 0;
for (auto c:s) {
if (c == '|') {
cnt ++;
} else if ( c == '*' && !(cnt%2)) {
ans ++;
}
}
return ans;
}
};
题目描述:
给定一个非空的字符串 s
,检查是否可以通过由它的一个子串重复多次构成。
思路:
1、先判断子串str的长度是否可以构成字符串s,即s.size()是否是str.size()的整数倍n;
2、然后判断字符串s是否可以由子串构成,即遍历字符串s,查看s的第i个元素是否与str的第i%n个元素相等
class Solution {
bool isprestr(const string &str, const string &s) {
int n = str.size();
for (int i = 0; i < s.size(); ++i) {
if (s[i] != str[i%n]) {
return false;
}
}
return true;
}
public:
bool repeatedSubstringPattern(string s) {
string str = "";
for (int i = 0; i < s.size()/2; ++ i) {
str += s[i];
if (s.size()%str.size() == 0) {
if (isprestr(str, s)){
return true;
}
}
}
return false;
}
};
题目描述:
给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。
如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 true ;否则,返回 false 。
思路:
1、字符串长度不相等,两个字符串就不可能相等
2、统计字符串中字符不相等的下标,当下标等于2时,进行这两个字符交换,判断是否交换后字符串是否相等,不相等则返回false;相等则返回true;
3、需要注意的是,当两个字符串不需要交换就相等的时候,即字符不相等的下标为0的时候,也要返回true;
class Solution {
void swap(char &a, char &b) {
char tmp = a;
a = b;
b = tmp;
}
public:
bool areAlmostEqual(string s1, string s2) {
if (s1.size() != s2.size()) {
return false;
}
vector<int> dif;
for (int i = 0; i < s1.size(); ++i) {
if (s1[i] != s2[i]) {
dif.push_back(i);
}
}
if (!dif.size()) {
return true;
}
if (dif.size() == 2) {
swap(s1[dif[0]], s1[dif[1]]);
return s1 == s2;
}
return false;
}
};
题目描述:
给你一个字符串 s 和一个字符串数组 words ,请你判断 s 是否为 words 的 前缀字符串 。
字符串 s 要成为 words 的 前缀字符串 ,需要满足:s 可以由 words 中的前 k(k 为 正数 )个字符串按顺序相连得到,且 k 不超过 words.length 。
如果 s 是 words 的 前缀字符串 ,返回 true ;否则,返回 false 。
思路:
用一个字符串substr记录words中出现的字符串,当字符串substr和要比对的字符串相等时,则返回true;否则返回false;
class Solution {
public:
bool isPrefixString(string s, vector<string>& words) {
string substr = "";
for (int i = 0; i < words.size(); ++ i) {
substr += words[i];
if (substr.size() == s.size()) {
return s == substr;
} else if (substr.size() > s.size()) {
return false;
}
}
return false;
}
};