腾讯云面试题-重复的字符串+设计测试用例

原题出自:https://leetcode.cn/problems/repeated-substring-pattern/

题目:

题解:

1、字符串长度为空,则返回false。

2、字符串长度为1,则为true,是由子串构成的。

3、字符串长度为2,判断首尾字符是否相等,相等则为true。

4、字符串长度大于2,则需要「枚举」子串。

        1)子串最大长度不能超过字符串的一半。

        2)子串个数是字符串的偶数倍。

        3)当子串长度为n时,s[i]位置s[i+n]位置的值应一致。

代码:

class Solution(object):
    def repeatedSubstringPattern(self, s):
        """
        :type s: str
        :rtype: bool
        """
        n = len(s) #全长
        #子串最大长度不会超过字符串的一半长度,所以默认子串最大循环长度为n//2+1 11//2+1=6
        for sub_n in range(1, n//2 + 1):
            # 子串长度应为字符串的整数倍,所以采用余数算法
            if n % sub_n == 0:
                # 从0号位置开始,循环判断后面的字符是否等于前面的子串
                if all(s[j] == s[j - sub_n] for j in range(sub_n, n)):
                    return True
        return False

python的all()函数:判定给定的迭代参数是否都为true

测试用例:

面试时经常会被问到,针对此算法题,设计下测试用例。

1)等价类划分法:在需求范围内挑选1条有效、无效的字符串。例如:aa、aba;

2)边界值法:在超出需求范围外挑选字符串。

3)错误推算法:基于经验去除推算可能出错的地方,例如:为空、参数验证。

4)判定表分析:所有条件的组合。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想编写一个gtest测试用例来测试分割字符串的函数,可以使用Google Test框架来实现。下面是一个示例: ```cpp #include <gtest/gtest.h> #include <vector> #include <string> // 分割字符串函数 std::vector<std::string> splitString(const std::string& str, char delimiter) { std::vector<std::string> tokens; size_t start = 0; size_t end = str.find(delimiter); while (end != std::string::npos) { tokens.push_back(str.substr(start, end - start)); start = end + 1; end = str.find(delimiter, start); } tokens.push_back(str.substr(start)); return tokens; } // 测试用例 TEST(StringSplitTest, SplitStringByComma) { std::string str = "Hello,World,How,Are,You"; std::vector<std::string> expected = {"Hello", "World", "How", "Are", "You"}; std::vector<std::string> actual = splitString(str, ','); ASSERT_EQ(expected, actual); } TEST(StringSplitTest, SplitStringBySpace) { std::string str = "Hello World How Are You"; std::vector<std::string> expected = {"Hello", "World", "How", "Are", "You"}; std::vector<std::string> actual = splitString(str, ' '); ASSERT_EQ(expected, actual); } // 运行测试 int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } ``` 上述代码中,我们定义了一个名为`splitString`的函数,该函数用于分割字符串。然后,我们使用`TEST`宏来定义两个测试用例,分别测试通过逗号和空格分割字符串的情况。在每个测试用例中,我们调用`splitString`函数并使用`ASSERT_EQ`宏来比较预期结果和实际结果是否相等。 最后,在`main`函数中使用`testing::InitGoogleTest`函数初始化gtest框架,并调用`RUN_ALL_TESTS`函数来运行所有的测试用例。 编译并运行这个程序,你将能够看到测试的结果。如果所有测试用例都通过,将会输出"OK",否则将显示失败的详细信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值