思いついたものメモ

※あくまでメモ・信頼性は全くない

  • N文字のK種類の文字からなる文字列strで、「i番目以降に文字cが出てくる最初のインデックスを各i,cについて全て求める」は後ろからやるとO(NK)
int dp[K][N+1];
for(int c = 0; c < K; c ++) {
  dp[c][N] = INF;
  for(int i = N-1; i >= 0; i ++) {
    dp[c][i] = str[i] == c ? 0 : min(dp[c][i+1]+1, INF);
  }
}
  • 「長さNの文字列1をちょうど(exactly)k回swapして文字列2に出来るか?」は
int t = N-閉路の数; //dfsで
if(t <= k && ((有効な、状態を行き来するswapが存在する && t%その閉路長 == k%その閉路長) || 一つでも、文字列を変えないswapが存在する))

という感じ?
「有効な、状態を行き来するswapが存在する」は普通は一つでも有効なswapが存在したら%2でおk
考えたらちょうどkの長さでノードからノードへいけるか?という問題だな。どういう名前なんでしょう?