• leetcode 467. 环绕字符串中唯一的子字符串


    题目描述:

    把字符串 s 看作是“abcdefghijklmnopqrstuvwxyz”的无限环绕字符串,所以 s 看起来是这样的:"...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd....". 

    现在我们有了另一个字符串 p 。你需要的是找出 s 中有多少个唯一的 p 的非空子串,尤其是当你的输入是字符串 p ,你需要输出字符串 s 中 p 的不同的非空子串的数目。 

    注意: p 仅由小写的英文字母组成,p 的大小可能超过 10000。

    示例 1:

    输入: "a"
    输出: 1
    解释: 字符串 S 中只有一个"a"子字符。

    示例 2:

    输入: "cac"
    输出: 2
    解释: 字符串 S 中的字符串“cac”只有两个子串“a”、“c”。.

    示例 3:

    输入: "zab"
    输出: 6
    解释: 在字符串 S 中有六个子串“z”、“a”、“b”、“za”、“ab”、“zab”。

    思路:
    如例3,当字符串为'z'时,子串只有'z',个数为1;当字符串为'za'时,字串有'z','a','za',个数为3,和字符串'z'相比,新增子串个数为2;
    字符串'zab',新增子串有'b','ab','zab'3个。
    也就是说按序的字符串每增加一个,新增的字串个数加1。
    建一个数组,存储每次新增的子串个数,最后统计数组中数字的和。
    题目链接https://leetcode-cn.com/problems/unique-substrings-in-wraparound-string/
    class Solution {
    public:
        int findSubstringInWraproundString(string p) {
            int maps[27];
            int m[2];
            int len,num = 0;
            memset(maps,0,sizeof(maps));
            for(int i = 0;i<p.size();i++)
            {
                if(i == 0)
                {
                    len = 1;
                    maps[p[i]-'a'] = 1;
                }
                else
                {
                    if(p[i-1] == p[i]-1 || (p[i] == 'a' && p[i-1] == 'z') )   //如果连续,则新增子串数加1
                    {
                       len++;
                    }
                    else
                    {
                        len = 1;
                    }
                    if(len > maps[p[i]-'a'])                           //存储子串个数
                    {
                        maps[p[i]-'a'] = len;
                    }  
                }
            }
            
            for(int i = 0;i<26;i++)
            {
                num = num + maps[i];
            }
            return num;
        }
    };
    
    
  • 相关阅读:
    C++异常第二篇---C++标准库异常类exception的使用
    C++异常(exception)第一篇--综合讲解
    libconfig第二篇----两个小例子
    libconfig第一篇———使用指南
    log4cxx第三篇----使用多个logger
    kafka第五篇
    kafka第四篇--快速入门(如何使用kafka)
    UVA 455(最小周期)
    UVA1584(环状序列)
    UVA1583(最小生成元)
  • 原文地址:https://www.cnblogs.com/hdyss/p/10803391.html
Copyright © 2020-2023  润新知