【c++】【字符串】【erase()和find()】● 459. 重复的子字符串

145 阅读1分钟

[459. 重复的子字符串]

image.png

思路

判断字符串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;

    }
};