[459. 重复的子字符串]

思路
判断字符串s是否有重复子串组成,只要两个s拼接在一起,里面还出现一个s的话,就说明是又重复子串组成。
当然,我们在判断 s + s 拼接的字符串里是否出现一个s的的时候,要删除 s + s 的首字符和尾字符,这样避免在s+s中搜索出原来的s,我们要搜索的是中间拼接出来的s。
补充知识
# std::string::npos
常量(值为-1)(表示“直到字符串的结尾”,作为返回值,它通常用于表示不匹配。)
string.end()
字符串 .end()为字符串末尾的下一个标志结束的符号,所以t.end()-1代表字符串的最后一个字符。
erase()函数的使用,可以用来进行内存擦除
有三种用法:
(1)erase( i, n); 删除从i开始的n个字符,例如erase( 0, 1),删除0位置的一个字符,即删除第一个字符
(2)erase( i ); 删除i处的一个字符(i是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符,(first和last都是迭代器)
class Solution {
public:
bool repeatedSubstringPattern(string s) {
string t = s + s;
t.erase(t.begin());
t.erase(t.end());
if(t.find(s) != std::string::npos){
return true;
}
return false;
}
};