【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

原文地址:https://www.cnblogs.com/Davirain/p/13544158.html