呕心沥血算法题——最大子串

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26924703/article/details/81512591
// 串“abcba”以字母“c”为中心左右对称;串“abba”是另一种模式的左右对称。
// 这两种情况我们都称这个串是镜像串。特别地,只含有1个字母的串,可以看成是第一种模式的镜像串。
// 一个串可以含有许多镜像子串。我们的目标是求一个串的最大镜像子串(最长的镜像子串),
// 如果有多个最大镜像子串,对称中心靠左的优先选中。例如:“abcdeefghhgfeiieje444k444lmn”的最大镜像子串是:“efghhgfe”


function f(s) {
   // 所求的最大对称子串
   let max_s = "";
   for (let i = 0; i < s.length; i++) {
      // 第一种对称模式
      let step = 1;
      try {
         for (; ;) {
            if (s.charAt(i - step) != s.charAt(i + step))
               break;
            step++;
         }
      } catch (e) {
      }
      let s1 = s.substring(i - step + 1, i + step);
      // 第二种对称模式
      step = 0;
      try {
         for (; ;) {
            if (s.charAt(i - step) != s.charAt(i + step + 1))
               break;
            step++;
         }
      } catch (e) {
      }
      let s2 = s.substring(i - step + 1, i + step + 1);
      if (s1.length > max_s.length)
         max_s = s1;
      if (s2.length > max_s.length)
         max_s = s2;
   }
   console.log(max_s);
}

f('abcdeefghhgfeiieje444k444lmn');

猜你喜欢

转载自blog.csdn.net/qq_26924703/article/details/81512591
今日推荐