Problem Statement
Bored with her current password, Ms. Ciel wants to change her password into a palindrome. (A string is called palindrome if it reads the same forwards and backwards.) To change the password, Ms. Ciel may perform this operation (that consists of two steps) zero or more times:
- Choose two different integers A and B such that 0 <= A < B < X.
- Swap the characters at (0-based) positions A and B of the current password.
You are given a
Definition
- Class:
- PasswordXPalindrome
- Method:
- minSwaps
- Parameters:
- String
- Returns:
- int
- Method signature:
- int minSwaps(String password)
- (be sure your method is public)
Constraints
- password will contain between 1 and 50 characters, inclusive.
- Each character of password will be one of 'a'-'z'.
- Each of the letters 'a'-'z' will occur at most twice in password.
Examples
"levle"
Returns: 1
One possible solution is to swap the last two characters to change the password into "level".
"racecar"
Returns: 0
The password is already a palindrome.
"abcdadcb"
Returns: 3
One possible solution: Swap the characters at positions 4 and 7. The password becomes "abcdbdca". Swap the characters at positions 5 and 6. The password becomes "abcdbcda". Swap the characters at positions 4 and 6. The password becomes "abcddcba".
"msmscielciel"
Returns: 5
"hicanyouguesstodaywriter"
Returns: -1
It is not possible to change this password into a palindrome.
"rngrng"
Returns: 1
"mystictcmysi"
Returns: 4
"fusharfushar"
Returns: 3
"cgyfourevercgyfouv"
Returns: 5
"misofmisof"
Returns: 2
"e"
Returns: 0
"vc"
Returns: -1
"xxy"
Returns: 1
"rrpp"
Returns: 1
"zaa"
Returns: 1
"dd"
Returns: 0
"abcdefghijklmnopqrstuvwxyayxwvutsrqponmlkjihgfedcb"
Returns: 24
"abcdefghijklmnopqrstuvwxazxwvutsrqponmlkjihgfedcb"
Returns: 24
"abcdefghijklmnopqrstuvwxaxwvutsrqponmlkjihgfedczb"
Returns: 2
"thequickbrownfxjmpdvlazygthequickbrownfxjmpdvlazyg"
Returns: 12
"abcabcdefdefghijklghijklmmnnooppqrqrstustuvv"
Returns: 18
"tqtrjpgdyvpheakbkmohrlifucgsaxdnlqnywjwivmseouxcf"
Returns: 23
"lwolodvvwd"
Returns: 3
"hzqbjktiuxxhuzitqgffbgcjk"
Returns: 11
"ilyeqzmadbdietqvtkfbfzylhmkav"
Returns: 10
"dldwmleeutymtuwsy"
Returns: 8
"ffdiaycimjeespqvuzglbsaykchpgdruvxnrbhqxmonjlzo"
Returns: 22
"cyxmsznqieonmfextwjlbjpzkiwotlrdpgkgsaayrcqbfd"
Returns: 20
"vrdocouhxhxdqrzzucvq"
Returns: 9
"kgkpeufqmdjihzatqxnwhjoxfelrurtvwlcgbbconapmdziv"
Returns: 22
"rmjixpufvblogvbxeoaqazfetziqjmcpgrultc"
Returns: 16
"sgtdpgnhsphntid"
Returns: 5
"yzxjrxogivtzyovwkwfrtcddcaigfjak"
Returns: 15
"trrtyy"
Returns: 2
"kgk"
Returns: 0
"brehvrqyehbyquudd"
Returns: 8
"cjihdcemuzqthzumnlbxfssjdfbnexilrrovqtv"
Returns: 18
"qjjckrvfwxbvzalltzmigcgbeykqsyuaedtifsurxwm"
Returns: 20
"dss"
Returns: 1
"prfjxzzyyxoprof"
Returns: 7
"lnbybyorlonrp"
Returns: 6
"gqztvclevdnkdnurqcpwobkrmfluaxyfhhjieopmwzbxayijgt"
Returns: 23
"zzeluewmrbvhuscfjihanyiqbltgnocwrxjoaqktxmvysfkddg"
Returns: 24
"abkqlavikxwofrglicyuhtozwcjpmszjbtnumnfseyeqxphrvg"
Returns: 22
"nwwbphxgbjvycxzgrksedijlfldytfaspcmqqnvzauurhktiem"
Returns: 20
"mbruumjtylszsaoiyochtpkelajfvnfiqcxdgvdkxegpzrbqhn"
Returns: 24
"opyktpwegusqdeuotlvshimxrbcrknbxiwjnczfjydvzhgfmql"
Returns: 22
"poxcmyzbytewdgqgszuudljtonewvirrvblsfpkinkafacxmjq"
Returns: 21
"ankxpjfmwjihorewfaiklcvdqmrtucypggnhtbdosxevusqybl"
Returns: 23
"dapwxutmgjularsgcjyfcfsrhxbqzwhtklnbiekmyvzpenidqv"
Returns: 24
"efvirlljtjnnaqkhfwkeibcdyzctodxqsgpamzymrhowpvbxgs"
Returns: 22
"uvgfvpdfjwpcmdrbakhnigyerabnqqjtucxhmswyxkzzlislt"
Returns: 22
"zvvkbiofmuqzkjwgyygxrtihulfsabnshxodrmanlecdcjwtq"
Returns: 24
"etldjukyiqymdicaforfnjkzshlggmpxpvsrtoanqxuevwhcw"
Returns: 23
"rgbpelh"
Returns: -1
"zsjb"
Returns: -1
"qwertyuiopasdfghjklzxcvbnm"
Returns: -1
"cfg"
Returns: -1
"aabbccddeeffgghhiijjkkllmmnnyoppqqrrssttuuvvwwxxo"
Returns: 23
"gaewanspohjoqulqnukiejlrpddfccbkvrftmbvitshgm"
Returns: 22
"wntjhnokavpumvbqefldoagfckgmejtusxpbrqwcrdxiyhsli"
Returns: 22
"gaewanspowjxqulqnukiejlrpddfccbkvrftmbvitshgmho"
Returns: 21
"aab"
Returns: 1
"vvbccbdderufggiijskklozzlopqqpersjtmtufaaxxwhwm"
Returns: 20
"efghijklmnopaacbbddopmnklijghef"
Returns: 8
"abchijklstuvmndaopqrbcdefgefghijklmnopqrstuvz"
Returns: 20
"yaxbcddebaecxfy"
Returns: 5
"abzaymsmsciqelcielppyzb"
Returns: 9
"zabcdefghijklmnopqrstuvwabcdefghijklmnopqrstuvw"
Returns: 12
"abcdeedcb"
Returns: 4
"abbcc"
Returns: 2
"abcedfeghafgcdbiiutzzultnnl"
Returns: 12
"acbba"
Returns: 1
"abbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyy"
Returns: 24
"aabbccddeeffgghhi"
Returns: 8
"abcdacb"
Returns: 2
"aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuvvwwxxyy"
Returns: 20
"abcdefghijklmnopqrstuvwxyabcdefghijklmnopqrstuvwxy"
Returns: 12
"zxxccvvbbnngghhjjkkllqqwffzweerrttyyuuiiooppaassdd"
Returns: 23
"ababc"
Returns: 1
"aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxy"
Returns: 24
"eacbbdcad"
Returns: 2
"abcdcdab"
Returns: 2
"abacc"
Returns: 2
"qqwweerrtyuuiiooppaassddffgghhjjktkllzzxxccvvbbny"
Returns: 19
"hbfxbotqpxkyrvmrovzjfymsqeegddclwsguncwjutihnipkl"
Returns: 24
"abcddba"
Returns: 1
"eabcdadcb"
Returns: 3
"edcbadcba"
Returns: 2
"efabcdadcbef"
Returns: 4
"ppieeaabchgmmxffdcbdghiqq"
Returns: 8
"vunedpiirqnpegbyyxusjogzkmfmoqllvjbsardhkctacxhft"
Returns: 23
"baa"
Returns: 1
"cabab"
Returns: 1
"abbac"
Returns: 2
"jbbrhondfgesnpiamiqgleosufjtkacqmpdrhlktc"
Returns: 18
"abc"
Returns: -1
"abb"
Returns: 1
"zammabbttccddeeffggqqyvvyz"
Returns: 6
"rgcogkufdtevbmkzwlzqhxtcrulwmoxqdaabhfve"
Returns: 18
"bcabc"
Returns: 1
"abcdefgfgdebca"
Returns: 3
"adccd"
Returns: 2
"qqwertyuuiooppaassddffgghhjjktklilzwzxxccvvbbnyer"
Returns: 22
"hropflnftbamjdaqiscgolngjcdbmkeihkepqrst"
Returns: 17
"acbab"
Returns: 2
"abcedfeghafgcdbiiutzzultnnlkxxkyqqy"
Returns: 16
"vagkbjuxiwjseqdmnnftugcromhvfphsaqwctoixblrkyplde"
Returns: 23