首尾字符相同的子字符串的数目
来源:互联网 发布:embedpano.js 编辑:程序博客网 时间:2024/05/17 09:20
直接上栗子:
假如输入字符是:
"abcab"
那么输出结果为:
7
解释:该字符串所有的子字符串列出来,你会发现,首尾字符相同的子字符串有:
"a""abca""b""bcab""c""a""b"
一共七个,所以输出7。
再举个栗子:
输入字符串:
cab
输出:
3
解释,首尾字符相同的子字符串有:
"c""a""b"
栗子已经很很清楚了,其实题目也比较简单,那么首先想到的肯定是把所有的子字符串全部搞出来,然后判断一下首尾字符是否相同,就可以了。
这个想法当然可行,但是时间复杂度较高,属于
从第二个栗子我们已经可以看出,其实输出结果还是跟字符串本身的长度是有关系的,这是因为把字符串中任意一个字符单独拿出来就是符合题意的子字符串,当然,结果一般比字符串长度要大。
那么我们可以这么想了,假如一个字符串中有一种字符它出现了n次:
"....a......a......a.......a......."
那么以相同的字符所在位置截取的字符串肯定是符合题意的,那么这样的字符串又有多少种呢,答案很显然:
#include <bits/stdc++.h>using namespace std;const int MAX_CHAR = 26;int countSubstringWithEqualEnds(string s){ int result = 0; int n = s.length(); int count[MAX_CHAR] = {0}; for (int i=0; i<n; i++) count[s[i]-'a']++; for (int i=0; i<MAX_CHAR; i++) result += (count[i]*(count[i]+1)/2); return result;}int main(){ string s("abcab"); cout << countSubstringWithEqualEnds(s); return 0;}
这个时间复杂度就是
0 0
- 首尾字符相同的子字符串的数目
- 字符数目相同的子字符串的数目
- 去除字符串的首尾空格字符
- 最长的连续相同字符的字符串和最长连续不相同字符的子字符串问题
- 面试题89:字符串数组首尾字符相同
- 将该字符串首尾的空格去掉,如果字符
- C++学习:去掉字符串的首尾指定字符
- JQuery中去掉字符串首尾的空白字符
- 统计字符串中字符种类的数目
- 编程找出字符串的最长子串,要求子串的所有字符相同
- 找出字符串中的最长子串,要求子串的所有字符相同
- 最大的相同字符子串
- 相同字符数目
- 1545: 相同字符数目
- 去除字符串首尾的空格
- 两字符串的首尾连接
- 字符串的首尾匹配算法
- 去除字符串首尾的双引号
- java io 文件夹和文件的拷贝
- CAFFE源码学习笔记之激活层
- Java设计模式-装饰模式(Decorator模式)
- pip install scipy报错:numpy.distutils.system_info.NotFoundError: no lapack/blas resources found
- arraylist和LinkedList
- 首尾字符相同的子字符串的数目
- java中数据的5种存储位置(堆与栈)
- android基础
- 关于IDEA的一些小问题
- 华为训练题:蛇形矩阵
- Linux
- Kafka基础操作命令
- WPF矢量字体图标(iconfont)
- redhat实现目录下特定文本类型内关键字查找及vim模式下关键字查找