【leetcode】#647 回文子串 Rust Solution
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。
示例 1:
输入:"abc"
输出:3
解释:三个回文子串: "a", "b", "c"
示例 2:
输入:"aaa"
输出:6
解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"
提示:
输入的字符串长度不会超过 1000 。
1 fn count_substrings(s: String) -> i32 {
2 let len = s.len();
3 let temp_str = &s as &str;
4 let mut count = 0;
5 for gap in 1..=len {
6 for index in 0..len {
7 if len < index + gap { continue; }
8 let inner_str = &temp_str[index..index+gap];
9 if is_palindromic(inner_str) {
10 count += 1;
11 }
12 }
13 }
14 count
15 }
16
17
18 fn is_palindromic(substring: &str) -> bool {
19 // let len = substring.len();
20 //
21 // for i in 0..(len / 2) {
22 // let lhs = &substring[i..i + 1];
23 // let rhs = &substring[len - i - 1..len - i];
24 // if lhs.eq(rhs) {
25 // continue;
26 // } else {
27 // return false;
28 // }
29 // }
30 // //遍历完所有正确返回true
31 // true
32
33 let temp = &substring
34 .chars()
35 .rev()
36 .collect::<String>()[..];
37
38 temp == substring
39 }
40
41 fn main() {
42 // let ret = is_palindromic("ab");
43 // aaaaa == 15
44 // aaa == 6
45 // abc == 3
46 let s = String::from("aaaaa"); // 15
47 let ret = count_substrings(s);
48 println!("ret = {}", ret);
49 }
C++ Solution 超时
1 learn string operator
2 1. 截取子串
3 s.substr(pos, n) 截取s中从pos开始(包括0)的n个字符的子串,并返回
4 s.substr(pos) 截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回
5 2. 替换子串
6 s.replace(pos, n, s1) 用s1替换s中从pos开始(包括0)的n个字符的子串
7 3. 查找子串
8 s.find(s1) 查找s中第一次出现s1的位置,并返回(包括0)
9 s.rfind(s1) 查找s中最后次出现s1的位置,并返回(包括0)
10 s.find_first_of(s1) 查找在s1中任意一个字符在s中第一次出现的位置,并返回(包括0)
11 s.find_last_of(s1) 查找在s1中任意一个字符在s中最后一次出现的位置,并返回(包括0)
12 s.fin_first_not_of(s1) 查找s中第一个不属于s1中的字符的位置,并返回(包括0)
13 s.fin_last_not_of(s1) 查找s中最后一个不属于s1中的字符的位置,并返回(包括0)
14 * */
15
16
17
18 #include <iostream>
19 #include <algorithm>
20 #include <string>
21
22 using namespace std;
23 bool is_palindromic(string s);
24
25 int countSubstrings(string s) {
26 int length = s.length();
27 // cout << "length = " << length << endl;
28 int count = 0;
29 for (int gap = 1; gap <= length; gap++){
30 for (int index = 0; index < length; index++){
31 if (length < index + gap) {
32 continue;
33 }
34 string inner_str = s.substr(index, gap);
35 // cout << "inner_str = " << inner_str << endl;
36 if (is_palindromic(inner_str)) {
37 count += 1;
38 }
39 }
40 }
41 return count;
42 }
43
44 bool is_palindromic(string s) {
45 int length = s.length();
46 for (int i = 0; i < length/2; i++){
47 string lhs = s.substr(i,1);
48 string rhs = s.substr(length-i-1,1);
49 if (lhs == rhs) {
50 continue;
51 }else {
52 return false;
53 }
54 }
55 return true;
56 }
57
58
59 int main() {
60 string s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
61
62 int ret = countSubstrings(s);
63 // bool ret = is_palindromic(s);
64 cout << "ret = " << ret << endl;
65 return 0;
66 }
Python Soluton 超时
1 # 代码超时
2 #
3 #
4 # python string slice
5 #
6 # 切片操作(slice)可以从一个字符串中获取子字符串(字符串的一部分)。我们使用一对方括号、起始偏移量start、终止偏移量end 以及可选的步长step 来定义一个分片。
7 #
8 # 格式: [start:end:step]
9 #
10 # • [:] 提取从开头(默认位置0)到结尾(默认位置-1)的整个字符串
11 # • [start:] 从start 提取到结尾
12 # • [:end] 从开头提取到end - 1
13 # • [start:end] 从start 提取到end - 1
14 # • [start:end:step] 从start 提取到end - 1,每step 个字符提取一个
15 # • 左侧第一个字符的位置/偏移量为0,右侧最后一个字符的位置/偏移量为-1
16 #
17 #
18 #
19 # 几个特别的examples 如下:
20 #
21 # 提取最后N个字符:
22 #
23 # >>> letter = 'abcdefghijklmnopqrstuvwxyz'
24 # >>> letter[-3:]
25 # 'xyz'
26 #
27 # 从开头到结尾,step为N:
28 #
29 # >>> letter[::5]
30 # 'afkpuz'
31 #
32 # 将字符串倒转(reverse), 通过设置步长为负数:
33 #
34 # >>> letter[::-1]
35 # 'zyxwvutsrqponmlkjihgfedcba'
36
37
38
39 def is_palindromic(s: str) -> bool:
40 length: int = len(s)
41 for i in range(length // 2):
42 lhs = s[i:i + 1]
43 rhs = s[length - i - 1:length - i]
44 if lhs == rhs:
45 continue
46 else:
47 return False
48 return True
49
50
51 def countSubstrings(s: str) -> int:
52 # def is_palindromic(s: str) -> bool:
53 # _length: int = len(s)
54 # for i in range(_length // 2):
55 # lhs = s[i:i + 1]
56 # rhs = s[_length - i - 1:_length - i]
57 # if lhs == rhs:
58 # continue
59 # else:
60 # return False
61 # return True
62
63 length: int = len(s)
64 count = 0
65 for gap in range(length):
66 new_gap = gap + 1
67 for index in range(length):
68 if length < index + new_gap:
69 continue
70 inner_str = s[index:index + new_gap]
71 if is_palindromic(inner_str):
72 count += 1
73
74 return count
75
76
77 if __name__ == "__main__":
78 # print("is_palindromic {}".format(is_palindromic("abc")))
79
80 print("ret = {}".format(countSubstrings("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")))
Github Link: https://github.com/DaviRain-Su/leetcode_solution/tree/master/palindromic_substrings
【leetcode】#647 回文子串 Rust Solution的更多相关文章
- LeetCode 647. 回文子串(Palindromic Substrings)
647. 回文子串 647. Palindromic Substrings 题目描述 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符 ...
- Java实现 LeetCode 647 回文子串(暴力)
647. 回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "a ...
- [LeetCode]647. 回文子串(DP)
###题目 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "abc&q ...
- Leetcode 647.回文子串
回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "abc&qu ...
- [LeetCode] 647. 回文子串 ☆☆☆(最长子串、动态规划、中心扩展算法)
描述 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "abc" ...
- Leetcode之动态规划(DP)专题-647. 回文子串(Palindromic Substrings)
Leetcode之动态规划(DP)专题-647. 回文子串(Palindromic Substrings) 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子 ...
- leetcode解析回文子串拆分
转载请注明来自souldak,微博:@evagle Given a string s, partition s such that every substring of the partition i ...
- 最长回文子串(动规,中心扩散法,Manacher算法)
题目 leetcode:5. Longest Palindromic Substring 解法 动态规划 时间复杂度\(O(n^2)\),空间复杂度\(O(n^2)\) 基本解法直接看代码 class ...
- 求最长回文子串 - leetcode 5. Longest Palindromic Substring
写在前面:忍不住吐槽几句今天上海的天气,次奥,鞋子里都能养鱼了...裤子也全湿了,衣服也全湿了,关键是这天气还打空调,只能瑟瑟发抖祈祷不要感冒了.... 前后切了一百零几道leetcode的题(sol ...
- LeetCode之“字符串”:最长回文子串
题目要求: 给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串.例如,给出字符串 "abcdzdcab",它的最长回文子串为 & ...
随机推荐
- Ubuntu桌面顶端没有网络图标
1 问题描述 刚装完新的linux系统后发现桌面顶部没有出现网络连接图标,网络无法进行连接配置. 2 解决方案 打开终端执行命令 nmcli network on或者sudo nmcli networ ...
- RochyLinux 8.6安装Oracle19c Client
一.环境准备 1.1 软件下载 下载地址:https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html 其中c ...
- Logoist - 适用于设计师以及初次使用者的快速制作精美 logo 工具
>从简单的标识到设计开发.它只需要一点 ...
- webrtc QOS笔记三 Nack机制浅析
nack源码浅析 nack源码浅析 Video Nack nack模块 nack list keyFrame list & recovered list nack 发送的策略 nack 模块的 ...
- SimpleAdmin手摸手教学之:项目架构设计2.0
一.说明 在SimpleAdmin1.0版本中,我将整体项目结构分为三大块,分别为架构核心.业务模块和应用服务.随着1.0版本的封版,回去再看我之前的项目架构,也暴露了一些问题,比如在1.0版本中,S ...
- [Java]【异常处理】在项目开发中的通用规范
这一问题,已苦恼多日,上述答案系近整整2日广泛阅读书籍.博客.网络问答后,归纳并苦思而成. 本博文仅罗列总的观点,各观点的具体解释,可私信Word笔记. 如需转载or复制时,请注明出处. 本博文同步发 ...
- 数据泵:导入导出dblink
环境介绍:12c->19c [oracle@enmoedu1 dpdump]$ expdp system/oracle directory=DATA_PUMP_DIR dumpfile=STAT ...
- 在void 中使用return的意思
在定义的void函数里如果想要提前终止函数 格式为 return; 如果 在有返回值的函数中 格式为: return+值(0 -1 ......) 但如果在void 函数中写return 0 ; 则会 ...
- node使用react项目启动错误TSError: ⨯ Unable to compile TypeScript:
1.错误内容 return new TSError(diagnosticText, diagnosticCodes) ^ TSError: ⨯ Unable to compile TypeScript ...
- Natasha V5.2.2.1 稳定版正式发布.
DotNetCore.Natasha.CSharp v5.2.2.1 使用 NMS Template 接管 CI 的部分功能. 取消 SourceLink.GitHub 的继承性. 优化几处内存占用问 ...