teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

追記4

2019/11/25 00:55

投稿

takabosoft
takabosoft

スコア8356

answer CHANGED
@@ -26,4 +26,23 @@
26
26
 
27
27
  ----
28
28
  追記3:
29
- あれ、もしかして"CABCAB"から"ABC"のオフセットを探すだけで答えになるんじゃ?
29
+ あれ、もしかして"CABCAB"から"ABC"のオフセットを探すだけで答えになるんじゃ?
30
+
31
+ ----
32
+ 追記4:
33
+ 追記3のコードをPlaygroundで書いてみました。
34
+ 一応動いているようには見えます。
35
+
36
+ ```swift
37
+ import Foundation
38
+
39
+ let S1 = "ABCDE" // 期待値
40
+ let S2 = "DEABC" // ずらす前
41
+
42
+ let S2S2 = String(S2 + S2)
43
+ if let range = S2S2.range(of: S1) {
44
+ print(S2S2.distance(from: S2S2.startIndex, to: range.lowerBound)) //2
45
+ } else {
46
+ print("error")
47
+ }
48
+ ```

3

もしかして

2019/11/25 00:55

投稿

takabosoft
takabosoft

スコア8356

answer CHANGED
@@ -22,4 +22,8 @@
22
22
  追記2:
23
23
  使う必要があるかは判りませんが、ずらしていった結果、一致するかという判定は以下のページの手法使えば簡単にできそうですね。
24
24
 
25
- [https://medium.com/@notestomyself/string-rotation-in-swift-ab5b38721c56](https://medium.com/@notestomyself/string-rotation-in-swift-ab5b38721c56)
25
+ [https://medium.com/@notestomyself/string-rotation-in-swift-ab5b38721c56](https://medium.com/@notestomyself/string-rotation-in-swift-ab5b38721c56)
26
+
27
+ ----
28
+ 追記3:
29
+ あれ、もしかして"CABCAB"から"ABC"のオフセットを探すだけで答えになるんじゃ?

2

2019/11/25 00:40

投稿

takabosoft
takabosoft

スコア8356

answer CHANGED
@@ -1,6 +1,7 @@
1
1
  一番ラクそうなのは、「一致するまで左にずらして、そのずらした回数をカウントアップする」、でしょうね。
2
2
 
3
3
  ----
4
+ 追記1:
4
5
  Swiftの文字列操作は面倒くさいので、左に1回ずらす関数のサンプルを作ってみました。
5
6
 
6
7
  ```swift
@@ -15,4 +16,10 @@
15
16
  print(S2.rotateLeft()) // "ABC" ※結果は戻り値という点に注意
16
17
  ```
17
18
 
18
- あとは躓くポイントは無さそうです。
19
+ あとは躓くポイントは無さそうです。
20
+
21
+ ----
22
+ 追記2:
23
+ 使う必要があるかは判りませんが、ずらしていった結果、一致するかという判定は以下のページの手法使えば簡単にできそうですね。
24
+
25
+ [https://medium.com/@notestomyself/string-rotation-in-swift-ab5b38721c56](https://medium.com/@notestomyself/string-rotation-in-swift-ab5b38721c56)

1

文字列操作は面倒くさい

2019/11/25 00:37

投稿

takabosoft
takabosoft

スコア8356

answer CHANGED
@@ -1,1 +1,18 @@
1
- 一番ラクそうなのは、「一致するまで左にずらして、そのずらした回数をカウントアップする」、でしょうね。
1
+ 一番ラクそうなのは、「一致するまで左にずらして、そのずらした回数をカウントアップする」、でしょうね。
2
+
3
+ ----
4
+ Swiftの文字列操作は面倒くさいので、左に1回ずらす関数のサンプルを作ってみました。
5
+
6
+ ```swift
7
+ extension String {
8
+ func rotateLeft() -> String {
9
+ return String(suffix(count - 1) + prefix(1))
10
+ }
11
+ }
12
+
13
+ let S2 = "CAB"
14
+ print(S2) // "CAB"
15
+ print(S2.rotateLeft()) // "ABC" ※結果は戻り値という点に注意
16
+ ```
17
+
18
+ あとは躓くポイントは無さそうです。