プログラミングのお題スレ Part22 (860レス)
プログラミングのお題スレ Part22 http://mevius.5ch.net/test/read.cgi/tech/1691038333/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
76: 蟻人間 ◆T6xkBnTXz7B0 [sage] 2023/08/26(土) 23:29:51.32 ID:JYg5slq9 >>71 C++ #include <stdio.h> bool is_kaibun(const char *str, size_t len) { for (size_t i = 0; i < len/2; i++) if (str[i] != str[len - i - 1]) return false; return true; } void detect_kaibun(const char *str, size_t len) { for (size_t klen = 1; klen <= len; klen++) { for (size_t i = 0; i < len - klen + 1; i++) if (is_kaibun(str + i, klen)) printf("%*s\n", (int)klen, str + i); } } int main(void) { detect_kaibun("ABCBCXC", 7); return 0; } http://mevius.5ch.net/test/read.cgi/tech/1691038333/76
77: 蟻人間 ◆T6xkBnTXz7B0 [sage] 2023/08/26(土) 23:37:32.47 ID:JYg5slq9 >>76 間違えた。 printf("%*s\n", (int)klen, str + i); を printf("%.*s\n", (int)klen, str + i); に訂正。 http://mevius.5ch.net/test/read.cgi/tech/1691038333/77
81: デフォルトの名無しさん [sage] 2023/08/27(日) 01:14:16.06 ID:xDzSjAxc >>76 こうすると計算量を減少できる fn len_of_eq(s: &str, index: usize, even: usize) -> usize { let mut len = 0; for (p, q) in std::iter::zip(s[(index + even)..].chars(), s[0..=index].chars().rev()) { if p != q { break; } len += 1; } return len; } fn print_kaibun(s: &str) { for index in 0..s.len() { for even in 0..=1 { for len in 1..=len_of_eq(s, index, even) { let first = index + 1 - len; let last = index + len - 1 + even; println!("{first}~{last}: {}", &s[first..=last]); } } } } fn main() { print_kaibun("ABCBAXYZZYX"); } http://mevius.5ch.net/test/read.cgi/tech/1691038333/81
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.279s*