250. 特殊回文字符串

250. 特殊回文字符串

有一个双向配对的字母列表,比如:a<->t, b<->y, y<->h, h<->n, m<->w, w<->w …

给定一个字符串,如果它是回文字符串,返回true。其中的字母可以被另一个对应的字母替换,但不允许嵌套替换,即a<-->b, b<-->c, 但a<-/->c。

例如,字符串 “swims” 返回true,因为“w”可以被“m”替换,而字符串会变成“smims”,是回文字符串。

字符串 “hob” 也返回true,因为“h”可以被“y”替换,“b”也可以被替换为“y”。然后字符串"yoy"也是回文。

但是,字符串 “ban” 返回false,因为嵌套替换是不允许的。即使“b“可以变成“y“,“n“可以变成“h“,新的字符串“yah“也不是回文。

样例

示例1:

输入:ambigram=["at", "by", "yh", "hn", "mw", "ww"], word="swims"

输出:true

说明:“w”可以被“m”代替后字符串变成了“smims”,其是回文字符串,因此返回true。

示例2:

输入: ambigram=["at", "by", "yh", "hn", "mw", "ww"], word="hob"

输出:true

说明:“h”可以用“y”代替,“b”也可以用“y”代替。那么这个字符串变成”yoy”,是回文字符串,因此返回true。

示例3:

输入:ambigram=["at", "by", "yh", "hn", "mw", "ww"], word="ban"

输出:false

说明:不允许嵌套替换。即使”b”可以变成”y”,”n”可以变成”h”,新的字符串”yah”也不是回文。

注意事项

列表ambigram中的每一位均为2个字母,代表其可以相互转换。

列表ambigram的长度不超过10,000

字符串word的长度不超过1,000

数据保证均为小写字母。

 

public class Solution {

    /**

     * @param ambigram: A list of paired ambigram letter.

     * @param word: A string need to be judged.

     * @return: If it is special palindrome string, return true.

     */

    public boolean ispalindrome(List<String> ambigram, String word) {

        // write your code here.

         char[] chars=word.toCharArray();

        for (int i=0;i< chars.length/2;i++){

             if (chars[i]!=chars[chars.length-i-1]){

                 String temp=chars[i]+"";

                 String temp2=chars[chars.length-i-1]+"";

                 boolean flag=false;

                 StringBuilder sum1= new StringBuilder();

                 StringBuilder sum2= new StringBuilder();

                 for (int j = 0; j < ambigram.size(); j++) {

                     String s=ambigram.get(j);

                     if (s.contains(temp) && s.contains(temp2)){

                         flag=true;

                         break;

                     }else if (s.contains(temp)){

                         String s1=s.replaceFirst(temp, "");

                         sum1.append(s1);

                         if (sum2.toString().contains(s1)){

                             flag=true;

                             break;

                         }

                     }else if (s.contains(temp2)){

                         String s1=s.replaceFirst(temp2, "");

                         sum2.append(s1);

                         if (sum1.toString().contains(s1)){

                             flag=true;

                             break;

                         }

                     }

                 }

                 if (!flag)

                 return false;

             }

        }

        return true;

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时代我西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值